Ik heb een char
en ik heb een String
nodig. 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 StringBuilder
wordt 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 char
in 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 value
char 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.java
in 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 vanchar
naarString
.
Bronnen:
- Hoe primitieve char naar String in Java te converteren
- 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 char
naar String
te 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 String
die 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 valueOf
methode in de klasse String
maakt 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 append
methode van de StringBuilder
klasse, 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;
}
}
}});