Saya punya char
dan saya butuh String
. Bagaimana cara saya mengkonversi dari satu ke yang lain?
Saya punya char
dan saya butuh String
. Bagaimana cara saya mengkonversi dari satu ke yang lain?
Jawaban:
Anda bisa menggunakannya Character.toString(char)
. Perhatikan bahwa metode ini hanya mengembalikan panggilan ke String.valueOf(char)
, yang juga berfungsi.
Seperti yang telah dicatat oleh orang lain, penggabungan string juga berfungsi sebagai jalan pintas:
String s = "" + 's';
Tetapi ini mengkompilasi ke:
String s = new StringBuilder().append("").append('s').toString();
yang kurang efisien karena StringBuilder
didukung oleh char[]
(over-dialokasikan oleh StringBuilder()
ke 16
), hanya untuk array yang akan membela diri disalin oleh yang dihasilkan String
.
String.valueOf(char)
"dapatkan di pintu belakang" dengan membungkus char
dalam array elemen tunggal dan meneruskannya ke konstruktor pribadi paket String(char[], boolean)
, yang menghindari salinan array.
new StringBuilder("").append('s').toString();
Pertanyaan yang bagus Saya punya lima metode berikut 6 untuk melakukannya.
// #1
String stringValueOf = String.valueOf('c'); // most efficient
// #2
String stringValueOfCharArray = String.valueOf(new char[]{x});
// #3
String characterToString = Character.toString('c');
// #4
String characterObjectToString = new Character('c').toString();
// #5
// Although this method seems very simple,
// this is less efficient because the concatenation
// expands to new StringBuilder().append(x).append("").toString();
String concatBlankString = 'c' + "";
// #6
String fromCharArray = new String(new char[]{x});
Catatan: Character.toString (char) mengembalikan String.valueOf (char) . Jadi efektif keduanya sama.
String.valueOf(char[] value)
memanggil new String(char[] value)
, yang pada gilirannya menetapkan value
array char.
public String(char value[]) {
this.value = Arrays.copyOf(value, value.length);
}
Di sisi lain String.valueOf(char value)
memanggil konstruktor pribadi paket berikut .
String(char[] value, boolean share) {
// assert share : "unshared not supported";
this.value = value;
}
Kode sumber dari String.java
dalam kode sumber Java 8
Oleh karena itu
String.valueOf(char)
tampaknya menjadi metode yang paling efisien, baik dari segi memori dan kecepatan, untuk mengkonversichar
keString
.
Di bawah ini adalah berbagai cara untuk mengonversi ke char c ke String s (dalam urutan penurunan kecepatan dan efisiensi)
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
Seperti yang dikatakan @WarFox - ada 6 metode untuk mengkonversi char ke string. Namun, yang tercepat akan melalui gabungan, meskipun jawaban di atas menyatakan itu String.valueOf
. Inilah patokan yang membuktikan bahwa:
@BenchmarkMode(Mode.Throughput)
@Fork(1)
@State(Scope.Thread)
@Warmup(iterations = 10, time = 1, batchSize = 1000, timeUnit = TimeUnit.SECONDS)
@Measurement(iterations = 10, time = 1, batchSize = 1000, timeUnit = TimeUnit.SECONDS)
public class CharToStringConversion {
private char c = 'c';
@Benchmark
public String stringValueOf() {
return String.valueOf(c);
}
@Benchmark
public String stringValueOfCharArray() {
return String.valueOf(new char[]{c});
}
@Benchmark
public String characterToString() {
return Character.toString(c);
}
@Benchmark
public String characterObjectToString() {
return new Character(c).toString();
}
@Benchmark
public String concatBlankStringPre() {
return c + "";
}
@Benchmark
public String concatBlankStringPost() {
return "" + c;
}
@Benchmark
public String fromCharArray() {
return new String(new char[]{c});
}
}
Dan hasil:
Benchmark Mode Cnt Score Error Units
CharToStringConversion.characterObjectToString thrpt 10 82132.021 ± 6841.497 ops/s
CharToStringConversion.characterToString thrpt 10 118232.069 ± 8242.847 ops/s
CharToStringConversion.concatBlankStringPost thrpt 10 136960.733 ± 9779.938 ops/s
CharToStringConversion.concatBlankStringPre thrpt 10 137244.446 ± 9113.373 ops/s
CharToStringConversion.fromCharArray thrpt 10 85464.842 ± 3127.211 ops/s
CharToStringConversion.stringValueOf thrpt 10 119281.976 ± 7053.832 ops/s
CharToStringConversion.stringValueOfCharArray thrpt 10 86563.837 ± 6436.527 ops/s
Seperti yang Anda lihat, yang tercepat adalah c + ""
atau "" + c
;
VM version: JDK 1.8.0_131, VM 25.131-b11
Perbedaan kinerja ini disebabkan oleh -XX:+OptimizeStringConcat
optimasi. Anda dapat membacanya di sini .
Coba ini: Character.toString(aChar)
atau ini saja:aChar + ""
Kami memiliki berbagai cara untuk mengonversi a char
menjadi String
. Salah satu caranya adalah dengan menggunakan metode statis toString()
di Character
kelas:
char ch = 'I';
String str1 = Character.toString(ch);
Sebenarnya toString
metode ini secara internal menggunakan valueOf
metode dari String
kelas yang menggunakan array char:
public static String toString(char c) {
return String.valueOf(c);
}
Jadi cara kedua adalah menggunakan ini secara langsung:
String str2 = String.valueOf(ch);
valueOf
Metode ini di String
kelas menggunakan array char:
public static String valueOf(char c) {
char data[] = {c};
return new String(data, true);
}
Jadi cara ketiga adalah menggunakan array anonim untuk membungkus satu karakter dan kemudian meneruskannya ke String
konstruktor:
String str4 = new String(new char[]{ch});
Cara keempat adalah menggunakan penggabungan:
String str3 = "" + ch;
Ini sebenarnya akan menggunakan append
metode dari StringBuilder
kelas yang sebenarnya lebih disukai ketika kita melakukan penggabungan dalam satu lingkaran.
Berikut adalah beberapa metode, tanpa urutan tertentu:
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();
Saya mengubah Char Array ke String
Char[] CharArray={ 'A', 'B', 'C'};
String text = String.copyValueOf(CharArray);
Saya sudah mencoba saran tetapi akhirnya menerapkannya sebagai berikut
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;
}
}
}});