简体   繁体   English

如何将字符转换为字符串?

[英]How to convert a char to a String?

I have a char and I need a String .我有一个char ,我需要一个String How do I convert from one to the other?如何从一个转换为另一个?

You can use Character.toString(char) .您可以使用Character.toString(char) Note that this method simply returns a call to String.valueOf(char) , which also works.请注意,此方法仅返回对String.valueOf(char)的调用,这也有效。

As others have noted, string concatenation works as a shortcut as well:正如其他人所指出的,字符串连接也可以作为一种快捷方式:

String s = "" + 's';

But this compiles down to:但这可以归结为:

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

which is less efficient because the StringBuilder is backed by a char[] (over-allocated by StringBuilder() to 16 ), only for that array to be defensively copied by the resulting String .这效率较低,因为StringBuilderchar[] (由StringBuilder()过度分配到16 ),仅用于由结果String防御性复制该String

String.valueOf(char) "gets in the back door" by wrapping the char in a single-element array and passing it to the package private constructor String(char[], boolean) , which avoids the array copy. String.valueOf(char)通过将char包装在单元素数组中并将其传递给包私有构造函数String(char[], boolean)来“进入后门”,从而避免了数组复制。

I've got of the following five six methods to do it.我有以下 六种方法来做到这一点。

// 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});

Note: Character.toString(char) returns String.valueOf(char) .注意: Character.toString(char)返回String.valueOf(char) So effectively both are same.因此,两者实际上是相同的。

String.valueOf(char[] value) invokes new String(char[] value) , which in turn sets the value char array. String.valueOf(char[] value)调用new String(char[] value) ,它依次设置value char 数组。

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

On the other hand String.valueOf(char value) invokes the following package private constructor.另一方面String.valueOf(char value)调用以下包私有构造函数。

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

Source code from String.java in Java 8 source code Java 8 源代码中来自String.java 源代码

Hence String.valueOf(char) seems to be most efficient method, in terms of both memory and speed, for converting char to String .因此String.valueOf(char)在内存和速度方面似乎是将char转换为String最有效方法。

Sources:资料来源:

  1. How to convert primitive char to String in Java 如何在Java中将原始字符转换为字符串
  2. How to convert Char to String in Java with Example 如何使用示例在 Java 中将字符转换为字符串

Below are various ways to convert to char c to String s (in decreasing order of speed and efficiency)以下是将 char c 转换为 String s 的各种方法(按速度和效率的降序排列)

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

Use the Character.toString() method like so:像这样使用Character.toString()方法:

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

Use any of the following:使用以下任何一种:

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

As @WarFox stated - there are 6 methods to convert char to string.正如@WarFox 所说 - 有 6 种方法可以将字符转换为字符串。 However, the fastest one would be via concatenation, despite answers above stating that it is String.valueOf .然而,最快的方法是通过串联,尽管上面的答案指出它是String.valueOf Here is benchmark that proves that:这是证明这一点的基准:

@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});
    }
}

And result:结果:

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

As you can see, the fastest one would be c + "" or "" + c ;如您所见,最快的是c + """" + c

VM version: JDK 1.8.0_131, VM 25.131-b11

This performance difference is due to -XX:+OptimizeStringConcat optimization.这种性能差异是由于-XX:+OptimizeStringConcat优化造成的。 You can read about it here .你可以在这里阅读它。

试试这个: Character.toString(aChar)或者只是这个: aChar + ""

We have various ways to convert a char to String .我们有多种方法将char转换为String One way is to make use of static method toString() in Character class:一种方法是在Character类中使用静态方法toString()

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

Actually this toString method internally makes use of valueOf method from String class which makes use of char array:实际上这个toString方法在内部使用了String类的valueOf方法,它使用了 char 数组:

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

So second way is to use this directly:所以第二种方法是直接使用它:

String str2 = String.valueOf(ch);

This valueOf method in String class makes use of char array: String类中的valueOf方法使用了 char 数组:

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

So the third way is to make use of an anonymous array to wrap a single character and then passing it to String constructor:所以第三种方法是利用匿名数组来包装单个字符,然后将其传递给String构造函数:

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

The fourth way is to make use of concatenation:第四种方式是利用concatenation:

String str3 = "" + ch;

This will actually make use of append method from StringBuilder class which is actually preferred when we are doing concatenation in a loop.这实际上将使用StringBuilder类的append方法,当我们在循环中进行连接时,它实际上是首选。

Here are a few methods, in no particular order:这里有一些方法,没有特定的顺序:

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

I am converting Char Array to String我正在将字符数组转换为字符串

Char[] CharArray={ 'A', 'B', 'C'};
String text = String.copyValueOf(CharArray);
  char vIn = 'A';
  String vOut = Character.toString(vIn);

For these types of conversion, I have site bookmarked called https://www.converttypes.com/ It helps me quickly get the conversion code for most of the languages I use.对于这些类型的转换,我有一个名为https://www.converttypes.com/ 的站点书签,它帮助我快速获取我使用的大多数语言的转换代码。

I've tried the suggestions but ended up implementing it as follows我已经尝试了这些建议,但最终按如下方式实施

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

String.valueOf() to Convert Char to String String.valueOf() 将 Char 转换为 String


The String class has a static method valueOf() that is designed for this particular use case. String 类具有专为此特定用例设计的静态方法 valueOf()。 Here you can see it in action:在这里你可以看到它的实际效果:

public class CharToString {
public static void main(String[] args) {
    char givenChar = 'c';
    String result = String.valueOf(givenChar);

    //check result value string or char 
    System.out.println(result.equals("c")); 
    System.out.println(result.equals(givenChar));
  }
}

Output::输出::

true
false

Character.toString() to Convert Char to String Character.toString() 将字符转换为字符串


We can also use the built-in method of Character class to convert a character to a String.我们还可以使用 Character 类的内置方法将字符转换为 String。

The below example illustrates this:下面的例子说明了这一点:

public class CharToString {
public static void main(String[] args) {
    char givenChar = 'c';
    String result = Character.toString(givenChar);

    //check result value string or char
    System.out.println(result.equals("c"));
    System.out.println(result.equals(givenChar));
    }
 }

Output::输出::

true
false

String Concatenation to Convert Char to String字符串连接将字符转换为字符串


This method simply concatenates the given character with an empty string to convert it to a String.此方法只是将给定的字符与空字符串连接起来,以将其转换为字符串。

The below example illustrates this:下面的例子说明了这一点:

public class CharToString {
public static void main(String[] args) {
    char myChar = 'c';
    String charToString = myChar + "";

    //check result value string or char
    System.out.println(charToString.equals("c"));
    System.out.println(charToString.equals(myChar));
   }
}

Output::输出::

true
false

However, this is the least efficient method of all since the seemingly simple concatenation operation expands to new StringBuilder().append(x).append("").toString();然而,这是效率最低的方法,因为看似简单的连接操作扩展为 new StringBuilder().append(x).append("").toString(); which is more time consuming than the other methods we discussed.这比我们讨论的其他方法更耗时。

Character's Constructor to Convert Char to String字符的构造函数将字符转换为字符串


You could also instantiate Character object and use a standard toString() method:您还可以实例化 Character 对象并使用标准的 toString() 方法:

@Test
public void charToString() {
char givenChar = 'x';
String result = new Character(givenChar).toString();

assertThat(result).isEqualTo("x");
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM