Ik weet hoe ik de index van een bepaald teken of getal in een string moet berekenen, maar is er een vooraf gedefinieerde methode die ik kan gebruiken om me het teken op de nde positie te geven? Dus in de string “foo”, als ik om het karakter met index 0 zou vragen, zou het “f” teruggeven.
Opmerking – in de bovenstaande vraag bedoel ik met “karakter” niet het char-gegevenstype, maar een letter of cijfer in een tekenreeks. Het belangrijkste hier is dat ik geen char ontvang wanneer de methode wordt aangeroepen, maar een string (van lengte 1). En ik weet van de methode substring(), maar ik vroeg me af of er een nettere manier was.
Antwoord 1, autoriteit 100%
De methode die je zoekt is charAt
. Hier is een voorbeeld:
String text = "foo";
char charAtZero = text.charAt(0);
System.out.println(charAtZero); // Prints f
Zie voor meer informatie de Java-documentatie op String.charAt
. Als je nog een eenvoudige tutorial wilt, deze of deze.
Als u het resultaat niet als een gegevenstype char
wilt, maar als een tekenreeks, gebruikt u de methode Character.toString
:
String text = "foo";
String letter = Character.toString(text.charAt(0));
System.out.println(letter); // Prints f
Als je meer informatie wilt over de klasse Character
en de methode toString
, heb ik mijn informatie van de documentatie over Character.toString.
Antwoord 2, autoriteit 13%
U wilt .charAt()
"mystring".charAt(2)
retourneert s
Als je vastbesloten bent om een string te hebben, zijn er een aantal manieren om een char naar een string te converteren:
String mychar = Character.toString("mystring".charAt(2));
Of
String mychar = ""+"mystring".charAt(2);
Of zelfs
String mychar = String.valueOf("mystring".charAt(2));
Bijvoorbeeld.
Antwoord 3, autoriteit 3%
Geen van de voorgestelde antwoorden werkt voor surrogaatparen die worden gebruikt om tekens te coderen buiten de Unicode Basis Meertalig Vliegtuig.
Hier is een voorbeeld waarin drie verschillende technieken worden gebruikt om de “tekens” van een tekenreeks te herhalen (inclusief het gebruik van Java 8 stream API). Let op: dit voorbeeld bevat tekens van het Unicode Supplementary Multilingual Plane (SMP). Je hebt een goed lettertype nodig om dit voorbeeld en het resultaat correct weer te geven.
// String containing characters of the Unicode
// Supplementary Multilingual Plane (SMP)
// In that particular case, hieroglyphs.
String str = "The quick brown ?? jumps over the lazy ????????";
Herhaling van tekens
De eerste oplossing is een eenvoudige lus over alle char
van de string:
/* 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
}
Iteratie van codepunten
De tweede oplossing gebruikt ook een expliciete lus, maar heeft toegang tot individuele
codepunten met codePointAt en het verhogen van de lusindex dienovereenkomstig tot 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.
}
Herhaal over codepunten met behulp van de Stream API
De derde oplossing is in principe hetzelfde als de tweede, maar gebruikt de 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
});
Resultaten
Als je dat testprogramma uitvoert, krijg je:
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 ?? ?? ?? ??
Zoals je kunt zien (als je hiërogliefen correct kunt weergeven), kan de eerste oplossing niet goed omgaan met tekens buiten de Unicode BMP. Aan de andere kant gaan de andere twee oplossingen goed om met surrogaatparen.
Antwoord 4, autoriteit 2%
Je zit behoorlijk vast met substring()
, gezien je vereisten. De standaardmanier is charAt()
, maar je zei dat je een char-gegevenstype niet accepteert.
Antwoord 5, autoriteit 2%
Je zou de kunnen gebruiken Resultaat van de String.charAt(int index)
methode als parameter voor String.valueOf(char c).
String.valueOf(myString.charAt(3)) // This will return a string of the character on the 3rd position.
Antwoord 6
Een hybride benadering die charAt
combineert met uw eis om geen char te krijgen, zou kunnen zijn
newstring = String.valueOf("foo".charAt(0));
Maar dat is niet echt “netter” dan substring()
om eerlijk te zijn.
Antwoord 7
Het is zo simpel als:
String charIs = string.charAt(index) + "";
Antwoord 8
Hier is de juiste code. Als je zybooks gebruikt, zal dit alle problemen oplossen.
for (int i = 0; i<passCode.length(); i++)
{
char letter = passCode.charAt(i);
if (letter == ' ' )
{
System.out.println("Space at " + i);
}
}
Antwoord 9
als iemand worstelt met kotlin, is de code:
var oldStr: String = "kotlin"
var firstChar: String = oldStr.elementAt(0).toString()
Log.d("firstChar", firstChar.toString())
dit zal de char op positie 1 teruggeven, in dit geval k
onthoud dat de index begint op positie 0, dus in dit voorbeeld:
kotlin zou zijn k=positie 0, o=positie 1, t=positie 2, l=positie 3, i=positie 4 en n=positie 5
Antwoord 10
CodePointAt in plaats van charAt is veiliger in gebruik. charAt kan breken als er emoji’s in de reeks zijn.
Antwoord 11
CharAt-functie werkt niet
Edittext.setText(YourString.toCharArray(),0,1);
Deze code werkt prima
Antwoord 12
Zoals dit:
String a ="hh1hhhhhhhh";
char s = a.charAt(3);