olvide - mi iphone cambio de color la pantalla
¿Cómo puedo truncar un NSString a una longitud establecida? (10)
Parece un poco delicado (se bloquea si el hilo es más corto que la longitud máxima)
Entonces, ¿por qué no arreglar esa parte?
NSRange stringRange = {0, MIN([myString length], 20)};
Busqué, pero sorprendentemente no pude encontrar una respuesta.
Tengo un NSString
largo que quiero acortar. Quiero que la longitud máxima sea de alrededor de 20 caracteres. Leí en alguna parte que la mejor solución es usar substringWithRange
. ¿Es esta la mejor manera de truncar una cadena?
NSRange stringRange = {0,20};
NSString *myString = @"This is a string, it''s a very long string, it''s a very long string indeed";
NSString *shortString = [myString substringWithRange:stringRange];
Parece un poco delicado (se bloquea si el hilo es más corto que la longitud máxima). Tampoco estoy seguro de si es seguro para Unicode. Hay una mejor manera de hacerlo? ¿Alguien tiene una buena categoría para esto?
Swift 4
let trimToCharacter = 20
let shortString = String(myString.prefix(trimToCharacter))
Feliz Codificación.
Dado que esta respuesta no está realmente en esta lista, es el más simple y el más sensible:
NSString *myString = @"This is a string, it''s a very long string, it''s a very long string indeed";
myString = (myString.length > 20) ? [myString substringToIndex:20] : myString;
En realidad, la parte de ser "segura para Unicode" estaba muerta, ya que muchos personajes se combinan en unicode, lo que las respuestas sugeridas no consideran.
Por ejemplo, si quieres escribir é. Una forma de hacerlo es escribiendo "e" (0x65) + combinando acento "" (0x301). Ahora, si escribe "café" de esta manera y trunca 4 caracteres, obtendrá "café". Esto podría causar problemas en algunos lugares.
Si no te importa esto, otras respuestas funcionan bien. De lo contrario, haz esto:
// define the range you''re interested in
NSRange stringRange = {0, MIN([myString length], 20)};
// adjust the range to include dependent chars
stringRange = [myString rangeOfComposedCharacterSequencesForRange:stringRange];
// Now you can create the short string
NSString *shortString = [myString substringWithRange:stringRange];
Tenga en cuenta que de esta forma su rango puede ser más largo que su longitud de rango inicial. En el ejemplo anterior de la cafetería, su rango se ampliará a una longitud de 5, aunque todavía tenga 4 "glifos". Si necesitas tener una longitud inferior a la que indicaste, debes verificar esto.
La solución más simple y agradable (con 3 puntos al final del texto):
NSString *newText = [text length] > intTextLimit ?
[[text substringToIndex:intTextLimit] stringByAppendingString:@"..."] :
text;
Podría usar una operación ternaria:
NSString *shortString = (stringRange.length <= [myString length]) ? myString : [myString substringWithRange:stringRange];
O para un mayor control sobre el resultado final:
if (stringRange.length > [myString length])
// throw exception, ignore error, or set shortString to myString
else
shortString = [myString substringWithRange:stringRange];
Si desea truncar desde el uso final:
[fileName substringToIndex:anyNumber];
Si quieres truncar desde el inicio:
[fileName substringFromIndex:anyNumber];
Todas las operaciones de NSString son seguras para Unicode, ya que NSString es esencialmente una matriz unichar internamente. Incluso si la cadena está en una codificación diferente, se convierte a la codificación especificada cuando se muestra.
Una solución más corta es:
NSString *shortString = ([myString length]>MINLENGTH ? [myString substringToIndex:MINLENGTH] : myString);
//Short the string if string more than 45 chars
if([self.tableCellNames[indexPath.section] length] > 40) {
// define the range you''re interested in
NSRange stringRange = {0, MIN([self.tableCellNames[indexPath.section] length], 40)};
// adjust the range to include dependent chars
stringRange = [self.tableCellNames[indexPath.section]
rangeOfComposedCharacterSequencesForRange:stringRange];
// Now you can create the short string
NSString *shortStringTitle = [self.tableCellNames[indexPath.section] substringWithRange:stringRange];
shortStringTitle = [shortStringTitle stringByAppendingString:@"..."];
titleLabel.text = shortStringTitle;
} else {
titleLabel.text = self.tableCellNames[indexPath.section];
}
// VKJ