为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

弑天下 2023-03-17 15:13:08
所以这是任务:给定一个字符串,返回一个字符串,其中原始字符串中的每个字符都有两个字符。而且我不明白为什么它输出的是数字而不是字母,我试过也不行?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”
查看完整描述

5 回答

?
慕村225694

TA贡献1880条经验 获得超4个赞

在 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) {

    char c = str.charAt(i);

    sb.append(c).append(c);

}

return sb.toString();


查看完整回答
反对 回复 2023-03-17
?
FFIVE

TA贡献1797条经验 获得超6个赞

为什么它输出整数?

+ 运算符在 Java 中被重载以仅对Strings 而不是chars 执行字符串连接。

来自Java 规范

如果 + 运算符的任一操作数类型为 String,则该操作为字符串连接。

否则,+ 运算符的每个操作数的类型必须是可转换(第 5.1.8 节)为基本数字类型的类型,否则会发生编译时错误。

在您的情况下, char 被转换为其原始值(int),然后添加。

相反,使用StringBuilder.append(char)将它们连接成一个String.

如果性能不是问题,你甚至可以这样做:

char c = 'A';
String s = "" + c + c;

s += "" + c + c;

这将强制使用 +String连接运算符,因为它以 ("") 开头String。上面的 Java Spec 举例说明:

+ 运算符在句法上是左结合的,无论类型分析确定它是表示字符串连接还是数字加法。在某些情况下,需要小心才能获得所需的结果。例如 [...]

1 + 2 + " fiddlers""3 fiddlers"

但结果是:

"fiddlers " + 1 + 2"fiddlers 12"


查看完整回答
反对 回复 2023-03-17
?
慕妹3242003

TA贡献1824条经验 获得超6个赞

在将结果(现在是整数)连接到字符串之前,您首先要添加字符的数值。尝试使用 print 语句进行调试:


public static String doubleChar(String str) {

  String s = "";

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

    System.out.println(str.charAt(i));

    System.out.println(str.charAt(i) + str.charAt(i));

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

  }

  return s;

}

做你想做的更有效的方法是:


public static String doubleChar(String str) {

  StringBuilder sb = new StringBuilder(str.length() * 2);

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

    char c = str.charAt(i);

    sb.append(c).append(c);

  }

  return sb.toString();

}


查看完整回答
反对 回复 2023-03-17
?
慕妹3146593

TA贡献1820条经验 获得超9个赞

String.charAt()返回一个charhttps://docs.oracle.com/javase/7/docs/api/java/lang/String.html#charAt(int) ) 所以你正在处理一个字符。使用 one char,您可以像这样对其执行操作(这将打印“65”,这是“A”字符的 ASCII 值):

System.out.println('A' + 0);

您可以通过将 1 添加到 来打印下一个字符(“B”)的 ASCII 值'A',如下所示:

System.out.println('A' + 1);

要使您的代码正常工作——使每个字符加倍——有多种选择。您可以一次附加一个字符:

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

或将操作转换为字符串的各种方式:

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


查看完整回答
反对 回复 2023-03-17
?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

您正在将两个字符的值相加。从以下位置更改String串联:

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

到:

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

这将确保字符转换为String.

注意:这是一个快速修复,您应该在循环内连接StringBuilder时使用。String请参阅其他答案以了解如何完成此操作。


查看完整回答
反对 回复 2023-03-17
  • 5 回答
  • 0 关注
  • 108 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信