【问题标题】:Java StringBuilder character appending returns unwanted numberJava StringBuilder 字符附加返回不需要的数字
【发布时间】:2018-11-14 04:23:49
【问题描述】:

如果这是一个之前已经回答过的基本问题,我很抱歉(我尝试寻找但没有找到任何东西)

我正在尝试编写以下 Java 方法:

 String winningCard(String trick, char trump) {
    StringBuilder sb = new StringBuilder();
    char suit;
    char rank;
    for(int i = 1;   i < trick.length(); i+=2) {
        if(trick.charAt(i) == trump) {
            suit = trick.charAt(i);
            rank = trick.charAt(i-1);
            sb.append(rank + suit); //issue here, returns a weird number
            break;
        }
    }
    String result = sb.toString();
    return result;
}

当使用这些参数“8s7hQd”调用时,例如“h”,它应该返回“7h”。

如果我将 StringBuilder 更改为仅附加西装或等级,它就可以了,但如果我按照上面的方式放置它,它会返回“159”,我认为这与 unicode 编码有关.

如果有好心人能告诉我我缺少什么,我将不胜感激。

提前致谢

【问题讨论】:

  • 你试过sb.append(rank); sb.append(suit);而不是一行sb.append(rank + suit);吗?
  • 哇,成功了!谢谢你,deHaar,你解决了我的问题。

标签: java unicode append stringbuilder bluej


【解决方案1】:

suitrank 基本上是数字。 + 是添加这些数字并附加它。

如果您在两者之间放置 "",字符将按照您的意愿附加,因为它会强制编译器将 + 与字符串一起使用。

sb.append(rank + "" + suit);

【讨论】:

  • 您可以简单地将"" 放在它们之间(或它们之前);它看起来不像 OP 想要一个空间。
  • 谢谢。这就是我认为我写的。
【解决方案2】:

+ 是一个棘手的东西,因为它在不同的上下文中意味着不同的东西。

  • 如果至少有一个操作数是String,则它充当字符串连接运算符。
  • 如果两个操作数都是数字,或者可以通过拆箱转换为数字,则它充当数字加法运算符。

你给它两个chars:这些是数字,所以会发生数字相加。

在添加这两个字符之前,它们被扩大到int;结果也是int。正是这个int,您要附加到字符串生成器,因此是“不需要的”数字。

所以,要么完全避免使用加法运算符(最好):

sb.append(rank).append(suit);

或者确保您使用的是字符串连接运算符:

sb.append("" + rank + suit);
// Left-associative, so evaluated as
// ("" + rank) + suit

sb.append(String.valueOf(rank) + suit);
// Etc.

但实际上,您也不需要这样做:只需附加子字符串:

sb.append(trick, i-1, i+1);

这会像trick.substring(i-1, i+1) 那样提取trick 字符串的一部分,但不会创建新字符串。

而且你不需要循环

【讨论】:

    【解决方案3】:

    你可以直接说那些字符应该被解释为字符串

    sb.append(String.valueOf(rank) + String.valueOf(suit))
    

    【讨论】:

      【解决方案4】:
      append(rank).append(suit);
      

      应该做的伎俩

      【讨论】:

        猜你喜欢
        • 2012-11-23
        • 2017-01-10
        • 2013-10-01
        • 2020-04-05
        • 2017-09-28
        • 2016-04-05
        • 1970-01-01
        • 1970-01-01
        • 2020-04-01
        相关资源
        最近更新 更多