【问题标题】:How to split a string based on number of white space如何根据空格数拆分字符串
【发布时间】:2017-11-08 13:33:18
【问题描述】:

我正在尝试使用 Java 中的 String.split 函数来实现这一点,但似乎没有找到一个优雅的解决方案。每个字符或单词之间的空格数是固定的。

String original = "H  E  L  L  O    W  O  R  L  D"

String finalWord = original.split();

System.out.println(finalWord);

HELLO WORLD 

基本上,每个字母之间的空白数量是固定的,例如2 并且单词之间的空格数也是固定的,例如4.

如何使用 Java 实现这一点?

H(空格)(空格)E(空格)(空格)L(空格)(空格)L(空格)(空格)O(空格)(空格)(空格)(空格)W(空格)(空格)O(空格)(空格)R(空格)(空格)L(空格)(空格)D

进入

你好(空间)世界

希望可以理解!

【问题讨论】:

  • 首先,将4 spaces 替换为single space。然后将2 spaces 替换为blank space
  • 发布无法编译的示例代码(即“final”不能是变量名,split 需要参数等)表明您没有太努力地找到解决方案靠自己。
  • 空格数是固定的所有输入,还是系统的可变参数之一?
  • HELLO 和 WOLD 之间有 5 个空格
  • “使用 String.split” 是要求的一部分吗?

标签: java string split delimiter


【解决方案1】:
original.replaceAll("\\s{4,}", " ").replaceAll("\\s{2,}", "").trim()

第一个将用空格替换 4+ 个空格,第二个将用没有空格替换 2+ 个空格。

【讨论】:

    【解决方案2】:

    所以你不需要拆分它,你可以简单地将 2 个空格替换为 1 个空,你会得到 HELLO(space)WORLD:

    String original = "H  E  L  L  O     W  O  R  L  D";
    String a = original.replaceAll("  ", "");
    System.out.println(a);
    

    【讨论】:

    • 它是如何工作的?我以为它不会输出空格,但令人惊讶的是它显示了正确的结果。
    • 这只是因为 OP 在他们的问题中包含 五个 空格,并且每个人都直接从那里复制粘贴代码。
    • 哎呀对不起它的2个空格和4个空格,我已经做了必要的调整。
    • 是的,第一个字符串在 HELLO 和 WORLD 之间有 5 个空格,所以我的解决方案可以正常工作,但是现在,单词之间有 4 个空格,我认为更好的解决方案是 @ajc
    【解决方案3】:

    你可以试试。

    public static void main(String[] args) throws IOException {
        //BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        //String line =reader.readLine();
        String line = "H  E  L  L  O    W  O  R  L  D";
        String finalString;
    
        finalString = line.replaceAll("  ", "");
        finalString = finalString.replaceAll("    ", " ");
        System.out.println(finalString);
    
    }
    

    【讨论】:

    • @cmy113 很简单,别忘了点击顶部箭头,谢谢:)
    【解决方案4】:

    将 4 个空格替换为 1 个空格,然后将 2 个空格替换为空: http://rextester.com/LURGM31649

    String original = "H  E  L  L  O    W  O  R  L  D";
    original.replaceAll("    ", " ").replaceAll("  ", "");
    

    【讨论】:

    • @baao 这不一定是 Javascript。它可能是 Groovy ;-)
    • 这段代码现在有一个问题和一个缺陷。问题:你不关心 replaceAll 结果(即没有分配给任何东西)。缺陷:用replaceAll代替replace没有意义。
    【解决方案5】:

    如果不是功课,可以用Java 8试试这个

    String original = "H  E  L  L  O    W  O  R  L  D";
    String str = Stream.of(original.split("\\s{4}"))
                       .map(x-> x.replaceAll("\\s{2}", ""))
                       .collect(Collectors.joining(" "));
    System.out.println(str);
    

    【讨论】:

      【解决方案6】:

      您可以将正则表达式传递给 split-separator 以拆分两个或三个空格,从而使四个空格保持不变:

      String input = "H  E  L  L  O    W  O  R  L  D";
      
      String[] parts = input.split("\\W{2,3}"); // [H, E, L, L, O, , W, O, R, L, D]
      System.out.println(String.join("", parts)); // HELLO WORLD
      

      【讨论】:

      • 您在 original 中放置了 5 个空格而不是 4 个空格。如果你使用 4 个空格,按照 OP 的要求,你会得到“HELLOWORLD”。
      • @DodgyCodeException 很好,诸如此类的事情会导致航天飞机坠毁。适应实际需求。
      猜你喜欢
      • 1970-01-01
      • 2021-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-07
      • 1970-01-01
      • 2018-05-12
      • 1970-01-01
      相关资源
      最近更新 更多