length - string[] java
Obtener carΓ‘cter de cadena por Γndice-Java (9)
Sé cómo calcular el índice de un determinado carácter o número en una cadena, pero ¿hay algún método predefinido que pueda usar para darme el carácter en la enésima posición? Entonces, en la cadena "foo", si pedía el carácter con índice 0, devolvería "f".
Nota: en la pregunta anterior, por "carácter" no me refiero al tipo de datos de caracteres, sino a una letra o número en una cadena. Lo importante aquí es que no recibo un char cuando se invoca el método, sino una cadena (de longitud 1). Y sé sobre el método substring (), pero me preguntaba si había una manera más ordenada.
Aquí está el código correcto. Si usa zybooks, esto resolverá todos los problemas.
for (int i = 0; i<passCode.length(); i++)
{
char letter = passCode.charAt(i);
if (letter == '' '' )
{
System.out.println("Space at " + i);
}
}
El método que estás buscando es charAt
. Aquí hay un ejemplo:
String text = "foo";
char a_char = text.charAt(0);
System.out.println(a_char); // Prints f
Para obtener más información, consulte la documentación de Java en String.charAt
. Si quieres otro tutorial simple, este o este .
Si no quiere el resultado como un tipo de datos char
, sino como una cadena, debería usar el método Character.toString
:
String text = "foo";
String a_letter = Character.toString(text.charAt(0));
System.out.println( a_letter ); // Prints f
Si desea obtener más información sobre la clase Character
y el método toString
, extraje mi información de la documentación en Character.toString .
Es tan simple como:
String charIs = string.charAt(index) + "";
Estás bastante atrapado con la substring()
, dados tus requisitos. La forma estándar sería charAt()
, pero dijiste que no aceptarías un tipo de datos de char.
Me gusta esto:
String a ="hh1hhhhhhhh";
char s = a.charAt(3);
Ninguna de las respuestas propuestas funciona para pares sustitutos utilizados para codificar caracteres fuera del plano multiligual básico Unicode .
Aquí hay un ejemplo que utiliza tres técnicas diferentes para iterar sobre los "caracteres" de una cadena (incluido el uso de la API de flujo de Java 8). Tenga en cuenta que este ejemplo incluye caracteres de Unicode Supplementary Multilingual Plane (SMP). Necesita una fuente adecuada para mostrar este ejemplo y el resultado correctamente.
// String containing characters of the Unicode
// Supplementary Multilingual Plane (SMP)
// In that particular case, hieroglyphs.
String str = "The quick brown π₯ jumps over the lazy ππΏπ
π‘";
Iterato de caracteres
La primera solución es un simple bucle sobre todo el char
de la cadena:
/* 1 */
System.out.println(
"/n/nUsing char iterator (do not work for surrogate pairs !)");
for (int pos = 0; pos < str.length(); ++pos) {
char c = str.charAt(pos);
System.out.printf("%s ", Character.toString(c));
// ^^^^^^^^^^^^^^^^^^^^^
// Convert to String as per OP request
}
Iteracion de puntos de codigo
La segunda solución también utiliza un bucle explícito, pero accediendo a puntos de código individuales con codePointAt e incrementando el índice de bucle según charCount :
/* 2 */
System.out.println(
"/n/nUsing Java 1.5 codePointAt(works as expected)");
for (int pos = 0; pos < str.length();) {
int cp = str.codePointAt(pos);
char chars[] = Character.toChars(cp);
// ^^^^^^^^^^^^^^^^^^^^^
// Convert to a `char[]`
// as code points outside the Unicode BMP
// will map to more than one Java `char`
System.out.printf("%s ", new String(chars));
// ^^^^^^^^^^^^^^^^^
// Convert to String as per OP request
pos += Character.charCount(cp);
// ^^^^^^^^^^^^^^^^^^^^^^^
// Increment pos by 1 of more depending
// the number of Java `char` required to
// encode that particular codepoint.
}
Iteramos los puntos de código usando Stream API
La tercera solución es básicamente la misma que la segunda, pero con Java 8 Stream API :
/* 3 */
System.out.println(
"/n/nUsing Java 8 stream (works as expected)");
str.codePoints().forEach(
cp -> {
char chars[] = Character.toChars(cp);
// ^^^^^^^^^^^^^^^^^^^^^
// Convert to a `char[]`
// as code points outside the Unicode BMP
// will map to more than one Java `char`
System.out.printf("%s ", new String(chars));
// ^^^^^^^^^^^^^^^^^
// Convert to String as per OP request
});
Resultados
Cuando ejecuta ese programa de prueba, obtiene:
Using char iterator (do not work for surrogate pairs !)
T h e q u i c k b r o w n ? ? j u m p s o v e r t h e l a z y ? ? ? ? ? ? ? ?
Using Java 1.5 codePointAt(works as expected)
T h e q u i c k b r o w n π₯ j u m p s o v e r t h e l a z y π πΏ π
π‘
Using Java 8 stream (works as expected)
T h e q u i c k b r o w n π₯ j u m p s o v e r t h e l a z y π πΏ π
π‘
Como puede ver (si puede mostrar los jeroglíficos correctamente), la primera solución no maneja correctamente los caracteres fuera del Unicode BMP. Por otro lado, las otras dos soluciones se manejan bien con parejas sustitutas.
Podría usar el resultado del método String.charAt(int index)
como parámetro para String.valueOf (char c) .
String.valueOf(myString.charAt(3)) // This will return a string of the character on the 3rd position.
Quieres .charAt()
"mystring".charAt(2)
devuelve s
Si estás empeñado en tener una cuerda, hay un par de maneras de convertir un carácter en una cadena:
String mychar = Character.toString("mystring".charAt(2));
O
String mychar = ""+"mystring".charAt(2);
O incluso
String mychar = String.valueOf("mystring".charAt(2));
Por ejemplo.
Un enfoque híbrido que combine charAt
con su requisito de no obtener char podría ser
newstring = String.valueOf("foo".charAt(0));
Pero eso no es realmente "más limpio" que la substring()
para ser honesto.