Tekenreeks per index ophalen – Java

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()

Hier is een tutorial

"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);

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes