如果这是一个以前已经回答的基本问题(我试过看但我没找到任何东西),我感到非常抱歉。
我正在尝试编写以下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编码有关。
如果有一种可以告诉我我失踪的东西,我非常感激。
提前致谢
答案 0 :(得分:2)
suit
和rank
基本上都是数字。 +正在添加这些数字并附加它。
如果在{I}之间放置""
,则会按照您的意图追加字符,因为它会强制编译器将+与字符串一起使用。
sb.append(rank + "" + suit);
答案 1 :(得分:2)
append(rank).append(suit);
应该做的伎俩
答案 2 :(得分:1)
+
是一个棘手的事情,因为它在不同的背景下意味着不同的东西。
String
,则它将充当字符串连接运算符。你给它两个char
:这些是数字,所以会出现数字加法。
在添加两个字符之前,它们被扩展为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
一样提取trick.substring(i-1, i+1)
字符串的一部分,但不会创建新字符串。
你不需要循环
答案 3 :(得分:0)
你可以直接说那些字符应该被解释为String by
sb.append(String.valueOf(rank) + String.valueOf(suit))