java—有没有其他方法可以删除字符串中的所有空格?

y1aodyip  于 2021-06-30  发布在  Java
关注(0)|答案(8)|浏览(382)

我有一个编程作业。它说我需要先反转字符串,然后将其改为大写,然后删除所有空格。我真的做了,但是我们的教授没有说任何关于使用 replaceAll() 方法。除此之外还有别的方法吗 replaceAll() ?
这是我的密码:

public static void main(String[] args) {
    String line = "the quick brown fox";
    String reverse = "";

    for (int i = line.length() - 1; i >= 0; i--) {
        reverse = reverse + line.charAt(i);
    }
    System.out.println(reverse.toUpperCase().replaceAll("\\s", ""));

}
ktecyv1j

ktecyv1j1#

你可以用 String.codePoints 方法进行迭代 int 此字符串的字符值,若要反转其顺序,请改为大写并删除空格:

String line = "the quick brown fox";

String reverse = line
        // return IntStream
        .codePoints()
        // return Stream<Character>
        .mapToObj(ch -> (char) ch)
        // reverse the order
        // of characters once
        .sorted((ch1, ch2) -> -1)
        // change to uppercase
        .map(Character::toUpperCase)
        // remove whitespaces
        .filter(ch -> !Character.isWhitespace(ch))
        // return Stream<String>
        .map(String::valueOf)
        // join strings with
        // characters back
        // to a single string
        .collect(Collectors.joining());

System.out.println(reverse); // XOFNWORBKCIUQEHT

另请参阅:是否有方法反转多维数组中的特定数组?

hxzsmxv2

hxzsmxv22#

即使不使用replaceall(),它仍然是一行:

String reverse = new StringBuilder(line).reverse().toString().toUpperCase().replace(" ", "");
eimct9ow

eimct9ow3#

严格遵循教授的描述(和意图?):

public static void main(String[] args) {
    String line = "the quick brown fox";

    String reverse = "";
    for (int i = line.length() - 1; i >= 0; i--) {
        reverse = reverse + line.charAt(i);
    }

    String upperCase = reverse.toUpperCase();

    String noSpaces = "";
    for (int i = 0; i < upperCase.length(); i++) {
        char ch = upperCase.charAt(i);
        if (!Character.isWhitespace(ch)) {
            noSpaces = noSpaces + ch;  // or noSpaces += ch;
        }
    }

    System.out.println(noSpaces);
}

注1:这可以通过一个循环来完成,但是这与描述不匹配(或者根本没有(用户)循环?)。
注2:使用 StringBuilder 不再需要它(当使用实际的java版本(>=11)时)-实际上我相信不使用它更有效,编译器做得更好(参见 StringConcatFactory )
注3:如果允许使用 StringBuilder ,它还有一个 reverse 方法
注4:意识到(为了将来) replaceAll() 与正则表达式一起工作,非常强大,但是有点过分了,只是替换了一个字符- replace() 会比较温和

wmvff8tz

wmvff8tz4#

这里有两种方法。第一个使用标准循环。

String line = "the quick brown fox";
StringBuilder sb = new StringBuilder();
for (int i = line.length() - 1; i >= 0; i--) {
    char ch;
    if ((ch = line.charAt(i)) != ' ') {
        sb.append(Character.toUpperCase(ch));
    }
}
System.out.println(sb.toString());

印刷品

XOFNWORBKCIUQEHT

第二个利用 StringBuilder 以及 replaceAll . 不管怎样,你应该问问你的教授,因为没有什么是公开禁止的。

String str = new StringBuilder("the quick brown fox")
        .reverse().toString().replaceAll("\\s+", "").toUpperCase();

System.out.println(str);

同时打印

XOFNWORBKCIUQEHT
jaql4c8m

jaql4c8m5#

字符#是空白

初始化 StringBuilder 对象并遍历大写字符串的每个字符。迭代时,使用 Character#isWhitespace 检查字符是否为空白字符。如果不是,则将字符附加到 StringBuilder 对象。循环完成后 StringBuilder 对象将包含除空白字符以外的所有字符。

public class Main {
    public static void main(String[] args) {
        String line = "the quick brown fox";
        String reverse = "";

        for (int i = line.length() - 1; i >= 0; i--) {
            reverse = reverse + line.charAt(i);
        }
        String upperCased = reverse.toUpperCase();
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < upperCased.length(); i++) {
            char ch = upperCased.charAt(i);
            if (!Character.isWhitespace(ch)) {
                sb.append(ch);
            }
        }

        System.out.println("The given string: " + line);
        System.out.println("The reverse of the given string: " + reverse);
        System.out.println("The reverse of the given string in UPPER case: " + upperCased);
        System.out.println("After removing all space from the reverse of the given string in UPPER case: " + sb);
    }
}

输出:

The given string: the quick brown fox
The reverse of the given string: xof nworb kciuq eht
The reverse of the given string in UPPER case: XOF NWORB KCIUQ EHT
After removing all space from the reverse of the given string in UPPER case: XOFNWORBKCIUQEHT

注:
如果你想转换 sbString ,使用 sb.toString() .
你可以用 String 而不是 StringBuilder 但我建议你用 StringBuilder 而不是 String 对于这种情况,因为循环中重复的字符串串联会创建 String 作为串联数。查看此讨论以了解更多信息。

ohtdti5x

ohtdti5x6#

如果不需要存储反转的行,也可以向后迭代并立即打印字符。

public static void main(String[] args) {
    String line = "the quick brown fox";
    for (char c : line.toUpperCase().toCharArray()) {
        if (!Character.isWhitespace(c)) {
            System.out.print(c);
        }
    }
}
plupiseo

plupiseo7#

您可以使用 Character.isWhitespace . 此外,通常最好使用 StringBuilder 在循环内串联时。

public static void main(String[] args) {
    String line = "the quick brown fox";
    StringBuilder sb = new StringBuilder(line.length());

    for (int i = line.length() - 1; i >= 0; i--) {
        char c = line.charAt(i);
        if(!Character.isWhitespace(c)) sb.append(Character.toUpperCase(c));
    }
    System.out.println(sb);
}
q3aa0525

q3aa05258#

@克尔伍德的答案是密码:

public static void main(String[] args) {
    String line = "the quick brown fox";
    String reverse = "";

    for (int i = line.length() - 1; i >= 0; i--) {
        char currentChar = line.charAt(i);
        if (currentChar != ' ') {
            reverse += currentChar;
        }
    }
    System.out.println(reverse.toUpperCase());

}

相关问题