我正在从服务器中检索一个播放器列表,之后我正在处理它(与问题无关)。这些不相关的流程仅在用户名没有空格时才有效,而是使用字符'_'
而不是' '
。我正在使用此代码循环遍历每个玩家名称的角色,然后检测它是否为' '
,如果是,则将其替换为'_'
,但由于某种原因,它并不是 char[] name;
for(String playerName : chatlist) {
name = playerName.toCharArray();
for(int i =0; i < name.length; i++) {
if(name[i] == ' ') {
name[i] = '_';
}
}
String nameS = new String(name);
System.out.println(playerName + " -> " + nameS);
}
。 t完全被检测到了?
Testuser 1
用户名和输出的示例如下:
Testuser_1
会输出ExampleUser One
ExampleUser_One
会输出{{1}}
答案 0 :(得分:6)
使用replaceAll("\\s+", "_")
。这是更好的方式。
否则,你将用&#34; _&#34;替换每个空间。 (这是你想要的吗?)
答案 1 :(得分:2)
答案 2 :(得分:2)
此代码按预期工作:
private static List<String> chatlist = Arrays.asList("Mr. Who", "Dr. Me");
public static void main(String[] args) {
for(String playerName : chatlist) {
char[] name = playerName.toCharArray();
for (int i = 0; i < name.length; i++) {
if (name[i] == ' ') name[i] = '_';
}
String nameS = new String(name);
System.out.println(playerName + " -> " + nameS);
}
}
输出:
Mr. Who -> Mr._Who
Dr. Me -> Dr._Me
也许你期望的空间角色根本不是空间?您可以通过打印出像System.out.println((int) ' ')
这样的代码来检查玩家姓名的字符。空格字符代码为32
。
答案 3 :(得分:0)
你的循环适合我。你确定chatlist
不是空的吗?
但正如其他人所说,更简单的方法是`name.replace('','_')。这样做更好,因为它使您的代码更短,更易读。包括你在内的每个人都知道你在一个代码行中想要做的事情。
答案 4 :(得分:0)
您可以查看this answer并使用String.replaceAll
代替手动字符替换。
只是为了澄清 - 在这个答案中,匹配了一整套所有空白字符,而不仅仅是空格。