Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将空格转换为下划线_Java_Arrays_String_Char_Whitespace - Fatal编程技术网

Java 将空格转换为下划线

Java 将空格转换为下划线,java,arrays,string,char,whitespace,Java,Arrays,String,Char,Whitespace,我正在从服务器检索一个玩家列表,我正在用它做一些与问题无关的事情。这些不相关的进程只有在用户名没有空格,而是使用字符“\u1”而不是“”时才能工作。我使用这段代码循环遍历每个playername的角色,然后检测它是否是一个“”,如果是,则将其替换为一个“”,但由于某种原因,它根本没有被检测到 char[] name; for(String playerName : chatlist) { name = playerName.toCharArray();

我正在从服务器检索一个玩家列表,我正在用它做一些与问题无关的事情。这些不相关的进程只有在用户名没有空格,而是使用字符“\u1”而不是“”时才能工作。我使用这段代码循环遍历每个playername的角色,然后检测它是否是一个“”,如果是,则将其替换为一个“”,但由于某种原因,它根本没有被检测到

    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);
    }
用户名和输出的示例如下所示:

Testuser 1将输出Testuser_1

ExampleUser One将输出ExampleUser_One

使用replaceAll\\s+。这是更好的方法。
否则,您将用一个“这是您想要的吗?”替换每个空格。使用此代码可以正常工作:

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);
    }
}

也许你期望的空格字符根本不是空格?您可以通过像System.out.PrintLInt“”这样打印球员姓名的代码来检查球员姓名的字符。空格字符代码是32。

您的循环适合我。你确定聊天列表不是空的吗

但正如其他人所说,更简单的方法是“name.replace”“,”。这样做更好,因为它使代码更短,可读性更强。每个人,包括您在内,都确切地知道您在这一行代码中要做什么。

您可以查看并使用String.replaceAll,而不是手动替换字符


只是澄清一下——在这个答案中,匹配的是一整套空白字符,而不仅仅是空格。

这是Java还是C?WriteLine看起来更像C而不是Java…复制了您的代码后,它对我来说很有用。请显示一个简短但完整的程序,但它不起作用。抱歉@JonSkeet我最后一分钟把它放在那里:P已修复,现在应该是System.out.println您确定它是实际的ASCII空格十六进制0x20吗?还有多个其他空白字符。还有一个问题是,如果值真的包含一个空格,那么它已经起作用了……是的,我想用字符“u”@DuncanPalmer-每个空格替换所有空格。。你的意思是abc3 spacesdef应该显示abc____;def?为什么这样做会更好?OP的代码对我有用。@Duncan-更小/更简单的代码:@WhoAmI这不是。也就是说,如果它也解决了根本问题,那么答案是可以的。“问题是——似乎没有。”邓肯——我同意。然而,答案显示了另一种方法,它使程序员的意图简洁明了。这是一个将空格转换为下划线的播放器名称,而不是20行代码,当有人阅读并计算出它的作用后,发现它将空格替换为下划线。
Mr. Who -> Mr._Who
Dr. Me -> Dr._Me