Java:将char转换为string

7

我刚刚在Eclipse中完成了这个操作:

String firstInput = removeSpaces(myIn.readLine());
String first = new String(firstInput.charAt(0));

然而,Eclipse 抱怨说:

构造函数 String(char) 未定义

那么我该如何将 char 转换为字符串呢?

谢谢。

编辑

我尝试了 substring 方法,但由于某些原因它没有起作用,但 gandalf 的方法对我来说完全有效!非常直接!


出于好奇,什么“没起作用”?它给你什么错误信息? - Amber
6个回答

15

最简单的方法是什么?

String x = 'c'+"";

或者当然也可以

String.valueOf('c');

工作得很好,我理解了。 :) 不过似乎有点奇怪,可能因为它太简单了! - Abs
2
将“c”连接到“”较不理想,因为它使用了StringBuilder。推荐使用String.valueOf方法。 - Steve Kuo
@Steve - 可能是,也可能不是。这取决于编译器的智能程度。JLS允许Java编译器将字符串连接表达式重写为最有效的等效代码序列。 - Stephen C
@Stephen 我使用了 javac 和 javap (1.6.0_10),'C'+"" 的结果是使用 StringBuilder。因此,尽管 JLS 可能允许重写,但 Sun 编译器不允许。 - Steve Kuo

4

与其...

String first = new String(firstInput.charAt(0));

你可以使用...

String first = firstInput.substring(0,1);

substring(begin,end)函数可以让你获得一个字符串的一部分,这里我们只获取了一个字符。


3
String x = String.valueOf('c');`

这是最直接的方法。


3

为什么不使用子字符串(substring)?

String first = firstInput.substring(0, 1);

2
String firstInput = removeSpaces(myIn.readLine());
String first = firstInput.substring(0,1);

这种方法的优点是不需要分配新的存储空间。


-1 - FALSE。为表示由子字符串创建的String对象分配了新存储空间。如果字符小于127并且您已经为该字符调用了valueOf,则String.valueOf(char) 可能不会分配任何新空间。 - Stephen C
@Stephen。至少在Sun SDK中是真的。它使用包私有的String构造函数,在与firstInput使用相同的char []数组上执行偏移量操作。请查看SDK源代码。 - Alexander Pogrebnyak
@Alexander。私有的字符串构造函数返回一个新的字符串对象,因此正在分配新的存储空间。在32位JVM上,它至少是4个字长加上对象头开销。天哪... - Stephen C
@Stephen。我已经回复了你的答案https://dev59.com/8UrSa4cB1Zd3GeqPXpmW#1829684。我不知道你使用的是哪个JDK,但是关于Sun 1.6,你不能在运行时将char转换为String而不分配String。至少substring不会为内部存储分配新的char[]数组。天啊... - Alexander Pogrebnyak
@Stephen。在你删除错误答案后,请有点良心,删掉你的诽谤性评论。 - Alexander Pogrebnyak

1
你可以这样做:
String s = Character.toString('k');

这只是调用 Character.valueOf('k') - Stephen C
不是这样的,它完全不会调用String.valueOf(char)方法。 - Jonathan Holloway

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接