2010-10-07 6 views
24

¿Hay algo así como una subcadena C# para Java? Estoy creando una aplicación móvil para el dispositivo Blackberry y, debido a restricciones de pantalla, solo puedo permitirme mostrar 13 letras más tres puntos para obtener puntos suspensivos.Dada una cadena en Java, simplemente tome las primeras letras X

¿Alguna sugerencia sobre cómo lograr esto?

Necesito los huesos de Java y no un truco de fantasía porque dudo que un dispositivo móvil tenga acceso a un marco completo. Al menos en mi experiencia trabajando con Java ME hace un año.

+0

http://download.oracle.com/javase/6/docs/api/. Debería encontrar los documentos para cualquier marco que esté instalado en su plataforma y tenerlos a mano. –

Respuesta

47

Puede hacer exactamente lo que quiera con String.substring().

String str = "please truncate me after 13 characters!"; 
if (str.length() > 16) 
    str = str.substring(0, 13) + "..." 
+1

mena if (str.length()> 13) ¿verdad? De alguna manera, ¿qué pasa si str.length es 14, no tienes un índice fuera de límite? : P – Paolo

34
String foo = someString.substring(0, Math.min(13, someString.length())); 

Editar: Sólo como referencia en general, a partir de guayaba 16.0 que puede hacer:

String truncated = Ascii.truncate(string, 16, "..."); 

para truncar con una longitud máxima de 16 caracteres con puntos suspensivos.

Aparte

Tenga en cuenta, sin embargo, que el truncamiento de una cadena para su visualización por el carácter no es un buen sistema para cualquier cosa, donde podría ser necesario considerar i18n. Hay (al menos) algunos problemas diferentes con él:

  1. Es posible que desee tener límites de palabras y/o espacios en blanco en cuenta para evitar truncar en un lugar incómodo.
  2. Dividir parejas sustitutas (aunque esto se puede evitar simplemente comprobando si el carácter que desea truncar es el primero de un par suplente).
  3. División de un carácter y un carácter combinando que le sigue (por ejemplo, un e seguido por un carácter combinando que pone el acento en que e.)
  4. La aparición de un personaje puede cambiar dependiendo del carácter que la sigue en cierta idiomas, por lo que solo truncar a ese personaje producirá algo que ni siquiera se parece al original.

Por estas razones (y otros), mi opinión es que las mejores prácticas para el truncamiento para su visualización en una interfaz de usuario es a desvanecerse en realidad a cabo la prestación del texto en el lugar correcto en la pantalla en lugar de truncar la cadena subyacente .

+0

Sí, funcionó muy bien. ¡Gracias un montón! :) Obtener una excepción indexOutOfBounds aunque sé lo que hace Math.min y debería funcionar ...déjame ver esto con el depurador. –

+1

@Colin, con esta lógica, no sabes si necesitas elipses. – jjnguy

+0

@Justin: Es cierto ... Estaba dando un ejemplo rápido de obtener una subcadena con las primeras letras X. Su ejemplo ciertamente es más aplicable a su situación específica. – ColinD

3

cada vez que hay alguna operación que se podría pensar es una cosa muy común de hacer, sin embargo, la API de Java requiere que revisar los límites, capturar excepciones, utilice Math.min(), etc (es decir, requiere más trabajo de lo que lo haría esperar), verifique el commons-lang de Apache. Casi siempre está allí en un formato más conciso. En este caso, usaría StringUtils#substring, que maneja el caso de error por usted. Aquí es lo que se dice javadoc:

Gets a substring from the specified String avoiding exceptions. 

A negative start position can be used to start n characters from the end of the String. 

A null String will return null. An empty ("") String will return "". 

StringUtils.substring(null, *) = null 
StringUtils.substring("", *)  = "" 
StringUtils.substring("abc", 0) = "abc" 
StringUtils.substring("abc", 2) = "c" 
StringUtils.substring("abc", 4) = "" 
StringUtils.substring("abc", -2) = "bc" 
StringUtils.substring("abc", -4) = "abc" 
+3

"Necesito los huesos de Java y no un truco de fantasía porque dudo que un dispositivo móvil tenga acceso a un marco completo ..." –

0
String str = "This is Mobile application." 
System.out.println(str.subSequence(0, 13)+"..."); 
+0

Así que esta solución también arroja un índice fuera de límites para cadenas cortas – Elemental

Cuestiones relacionadas