为什么我的字符串在我用+添加字符后变成了整数而不是字母?

所以这是任务:给定一个字符串,返回一个字符串,其中原始字符串中的每个字符都有两个字符。


而且我不明白为什么它输出的是数字而不是字母,我试过也不行?


public String doubleChar(String str) {

  String s = "";

  for(int i=0; i<str.length(); i++){

  s +=  str.charAt(i) + str.charAt(i);

  

  }

    return s;

}

预期的 :


doubleChar("The") → "TThhee"


双字符(“AAbb”)→“AAAAbbbb”


输出:


doubleChar("The") → "168208202"


双字符(“AAbb”)→“130130196196”


弑天下
浏览 142回答 5
5回答

慕村225694

在 Java 中,char基本类型基本上只是一个映射到字符的数值,因此如果将两个char值加在一起,它们会产生一个数字而不是另一个char(而不是String),因此您最终会得到一个,int如您所见。要解决此问题,您可以使用如下Character.toString(char)方法:s += Character.toString(str.charAt(i)) + Character.toString(str.charAt(i))但这一切都相当低效,因为您是在循环中执行此操作,因此字符串连接会产生很多String不必要的对象。更有效的方法是像这样使用 aStringBuilder及其方法:append(char)StringBuilder sb = new StringBuilder(str.length() * 2);for (int i = 0; i < str.length(); ++i) {&nbsp; &nbsp; char c = str.charAt(i);&nbsp; &nbsp; sb.append(c).append(c);}return sb.toString();

FFIVE

为什么它输出整数?+ 运算符在 Java 中被重载以仅对Strings 而不是chars 执行字符串连接。来自Java 规范:如果 + 运算符的任一操作数类型为 String,则该操作为字符串连接。否则,+ 运算符的每个操作数的类型必须是可转换(第 5.1.8 节)为基本数字类型的类型,否则会发生编译时错误。在您的情况下, char 被转换为其原始值(int),然后添加。相反,使用StringBuilder.append(char)将它们连接成一个String.如果性能不是问题,你甚至可以这样做:char&nbsp;c&nbsp;=&nbsp;'A'; String&nbsp;s&nbsp;=&nbsp;""&nbsp;+&nbsp;c&nbsp;+&nbsp;c;和s += "" + c + c;这将强制使用 +String连接运算符,因为它以 ("") 开头String。上面的 Java Spec 举例说明:+ 运算符在句法上是左结合的,无论类型分析确定它是表示字符串连接还是数字加法。在某些情况下,需要小心才能获得所需的结果。例如 [...]1 + 2 + " fiddlers"是"3 fiddlers"但结果是:"fiddlers " + 1 + 2是"fiddlers 12"

慕妹3242003

在将结果(现在是整数)连接到字符串之前,您首先要添加字符的数值。尝试使用 print 语句进行调试:public static String doubleChar(String str) {&nbsp; String s = "";&nbsp; for (int i = 0; i < str.length(); i++) {&nbsp; &nbsp; System.out.println(str.charAt(i));&nbsp; &nbsp; System.out.println(str.charAt(i) + str.charAt(i));&nbsp; &nbsp; s += str.charAt(i) + str.charAt(i);&nbsp; }&nbsp; return s;}做你想做的更有效的方法是:public static String doubleChar(String str) {&nbsp; StringBuilder sb = new StringBuilder(str.length() * 2);&nbsp; for (int i = 0; i < str.length(); i++) {&nbsp; &nbsp; char c = str.charAt(i);&nbsp; &nbsp; sb.append(c).append(c);&nbsp; }&nbsp; return sb.toString();}

慕妹3146593

String.charAt()返回一个char(&nbsp;https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#charAt(int)&nbsp;) 所以你正在处理一个字符。使用 one&nbsp;char,您可以像这样对其执行操作(这将打印“65”,这是“A”字符的 ASCII 值):System.out.println('A'&nbsp;+&nbsp;0);您可以通过将 1 添加到 来打印下一个字符(“B”)的 ASCII 值'A',如下所示:System.out.println('A'&nbsp;+&nbsp;1);要使您的代码正常工作——使每个字符加倍——有多种选择。您可以一次附加一个字符:s&nbsp;+=&nbsp;str.charAt(i); s&nbsp;+=&nbsp;str.charAt(i);或将操作转换为字符串的各种方式:s&nbsp;+=&nbsp;""&nbsp;+&nbsp;str.charAt(i)&nbsp;+&nbsp;str.charAt(i);

qq_遁去的一_1

您正在将两个字符的值相加。从以下位置更改String串联:s&nbsp;+=&nbsp;&nbsp;str.charAt(i)&nbsp;+&nbsp;str.charAt(i);到:s&nbsp;+=&nbsp;&nbsp;str.charAt(i)&nbsp;+&nbsp;""&nbsp;+&nbsp;str.charAt(i);这将确保字符转换为String.注意:这是一个快速修复,您应该在循环内连接StringBuilder时使用。String请参阅其他答案以了解如何完成此操作。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java