Hoe converteer je een char naar een string?

Ik heb een charen ik heb een Stringnodig. Hoe converteer ik van de ene naar de andere?


Antwoord 1, autoriteit 100%

Je kunt Character.toString(char). Merk op dat deze methode gewoon een aanroep retourneert naar String.valueOf(char), wat ook werkt.

Zoals anderen al hebben opgemerkt, werkt het samenvoegen van tekenreeksen ook als een snelkoppeling:

String s = "" + 's';

Maar dit komt neer op:

String s = new StringBuilder().append("").append('s').toString();

wat minder efficiënt is omdat de StringBuilderwordt ondersteund door een char[](overtoegewezen door StringBuilder()tot 16), alleen om die array defensief te kopiëren door de resulterende String.

String.valueOf(char)“komt door de achterdeur” door de charin een array met één element te wikkelen en deze door te geven aan de private constructor van het pakket String(char[], boolean), die het kopiëren van de array vermijdt.


Antwoord 2, autoriteit 37%

Ik heb de volgende vijfzesmethoden om dit te doen.

// Method #1
String stringValueOf = String.valueOf('c'); // most efficient
// Method #2
String stringValueOfCharArray = String.valueOf(new char[]{x});
// Method #3
String characterToString = Character.toString('c');
// Method #4
String characterObjectToString = new Character('c').toString();
// Method #5
// Although this approach seems very simple, 
// this is less efficient because the concatenation
// expands to a StringBuilder.
String concatBlankString = 'c' + "";
// Method #6
String fromCharArray = new String(new char[]{x});

Opmerking: Character.toString(char)retourneert String.valueOf(char). Dus in feite zijn beide hetzelfde.

String.valueOf(char[] value)roept new String(char[] value)op, die op zijn beurt de valuechar instelt reeks.

public String(char value[]) {
    this.value = Arrays.copyOf(value, value.length);
}

Aan de andere kant roept String.valueOf(char value)de volgende pakket private constructor aan.

String(char[] value, boolean share) {
    // assert share : "unshared not supported";
    this.value = value;
}

Broncode van String.javain Java 8-broncode

Daarom lijkt String.valueOf(char)de meest efficiënte methode te zijn, zowel in termen van geheugen als snelheid, voor het converteren van charnaar String.

Bronnen:

  1. Hoe primitieve char naar String in Java te converteren
  2. Converteren Char to String in Java met voorbeeld

Antwoord 3, autoriteit 8%

Hieronder staan ​​verschillende manieren om char c naar String s te converteren (in afnemende volgorde van snelheid en efficiëntie)

char c = 'a';
String s = String.valueOf(c);             // fastest + memory efficient
String s = Character.toString(c);
String s = new String(new char[]{c});
String s = String.valueOf(new char[]{c});
String s = new Character(c).toString();
String s = "" + c;                        // slowest + memory inefficient

Antwoord 4, autoriteit 5%

Gebruik de Character.toString()methode als volgt:

char mChar = 'l';
String s = Character.toString(mChar);

Antwoord 5, autoriteit 5%

Gebruik een van de volgende opties:

String str = String.valueOf('c');
String str = Character.toString('c');
String str = 'c' + "";

Antwoord 6, autoriteit 2%

Probeer dit: Character.toString(aChar)of alleen dit: aChar + ""


Antwoord 7

We hebben verschillende manieren om een ​​charnaar Stringte converteren. Eénmanier is om gebruik te maken van de statische methode toString()in de klasse Character:

char ch = 'I'; 
String str1 = Character.toString(ch);

Eigenlijk maakt deze toString-methode intern gebruik van de valueOf-methode van de klasse Stringdie gebruik maakt van char array:

public static String toString(char c) {
    return String.valueOf(c);
}

Dus de tweedemanier is om dit rechtstreeks te gebruiken:

String str2 = String.valueOf(ch);

Deze valueOfmethode in de klasse Stringmaakt gebruik van char array:

public static String valueOf(char c) {
        char data[] = {c};
        return new String(data, true);
}

Dus de derdemanier is om gebruik te maken van een anonieme array om een ​​enkel teken in te pakken en dit vervolgens door te geven aan de String-constructor:

String str4 = new String(new char[]{ch});

De vierdemanier is om gebruik te maken van aaneenschakeling:

String str3 = "" + ch;

Dit zal feitelijk gebruik maken van de appendmethode van de StringBuilderklasse, wat eigenlijk de voorkeur heeft wanneer we aaneenschakeling in een lus doen.


Antwoord 8

Hier zijn een paar methoden, in willekeurige volgorde:

char c = 'c';
String s = Character.toString(c); // Most efficient way
s = new Character(c).toString(); // Same as above except new Character objects needs to be garbage-collected
s = c + ""; // Least efficient and most memory-inefficient, but common amongst beginners because of its simplicity
s = String.valueOf(c); // Also quite common
s = String.format("%c", c); // Not common
Formatter formatter = new Formatter();
s = formatter.format("%c", c).toString(); // Same as above
formatter.close();

Antwoord 9

Ik converteer Char Array naar String

Char[] CharArray={ 'A', 'B', 'C'};
String text = String.copyValueOf(CharArray);

Antwoord 10

 char vIn = 'A';
  String vOut = Character.toString(vIn);

Voor dit soort conversies heb ik een bladwijzer voor de site gemaakt met de naam https://www.converttypes.com/
Het helpt me om snel de conversiecode te krijgen voor de meeste talen die ik gebruik.


Antwoord 11

Ik heb de suggesties geprobeerd, maar heb ze uiteindelijk als volgt geïmplementeerd

editView.setFilters(new InputFilter[]{new InputFilter()
        {
            @Override
            public CharSequence filter(CharSequence source, int start, int end,
                                       Spanned dest, int dstart, int dend)
            {
                String prefix = "http://";
                //make sure our prefix is visible
                String destination = dest.toString();
                //Check If we already have our prefix - make sure it doesn't
                //get deleted
                if (destination.startsWith(prefix) && (dstart <= prefix.length() - 1))
                {
                    //Yep - our prefix gets modified - try preventing it.
                    int newEnd = (dend >= prefix.length()) ? dend : prefix.length();
                    SpannableStringBuilder builder = new SpannableStringBuilder(
                            destination.substring(dstart, newEnd));
                    builder.append(source);
                    if (source instanceof Spanned)
                    {
                        TextUtils.copySpansFrom(
                                (Spanned) source, 0, source.length(), null, builder, newEnd);
                    }
                    return builder;
                }
                else
                {
                    //Accept original replacement (by returning null)
                    return null;
                }
            }
        }});

Other episodes