【问题标题】:Java: Substring to arrray of StringsJava:字符串数组的子字符串
【发布时间】:2018-10-11 21:54:20
【问题描述】:

我有这个字符串:

Java                             2              5             22              8

我想要一个包含这些值的字符串数组:

["2"; "5"; "22"; "8"]

有没有办法使用 subString() 方法来做到这一点,还是我应该采取另一种方法?

【问题讨论】:

  • 8怎么了?
  • 我错过了那个。现已修复,谢谢!
  • 试试split?
  • 对字符串中的数字进行正则表达式可能是您最好的选择。
  • 每个文本字符串是否总是正好有 4 个(空格分隔)数字,或者每个字符串也可以有这个“数量”?

标签: java arrays substring


【解决方案1】:

还有多少个空格:

String str = "Java    5     22     8";

String[] arr = 
  str
  .replaceAll("( )+"," ")
  .replaceFirst("Java ", "")
  .split(" ");

for (String a : arr) {
  System.out.println(a);
}

【讨论】:

    【解决方案2】:

    在 split 和 regex 上搜索了一下后,我找到了答案:line.split("[ ]{2,}")

    【讨论】:

    • 我想你会发现line.split("\\s+") 会更好:)
    【解决方案3】:

    你看起来对"Java"前缀不感兴趣,所以你可以调用substringtrim(去掉4个数字周围的空格):

    line.substring(4).trim() // equals "2              5             22              8"
    

    然后您可以在split 行中添加一个或多个空白字符。执行此操作的 Java 正则表达式是 "\\s+",因为 \\s 匹配空白字符,而 + 表示“一个或多个”。

    line.substring(4).trim().split("\\s+") // equals ["2", "5", "22", "8"]
    

    【讨论】:

    • 这是 IMO 的最佳答案
    【解决方案4】:

    如果你想使用子字符串,这里有一些可能不是最优的解决方案。您从字符串的开头开始,寻找第一个数字,然后继续寻找下一个不是数字的字符。之间做子串,然后继续寻找下一个数字。

      while (i<s.length()){
      char c=s.charAt(i);
      if(c>='0'&&c<='9'){
      j=i;
       char c1=s.charAt(j);
      while ((c1>='0'&&c1<='9')&&j<s.length()){ 
          c1=s.charAt(j);
          j++;
          }
      strings[p++]=s.substring(i, j);
       i=j;   
      }else i++;
    
      }
    

    【讨论】:

      【解决方案5】:

      我不知道这些是否由空格分隔,但如果是这样,您可以在您的字符串上使用 .split() 方法。

      例子:

      String sampleString = "2 5 22 8";
      String[] stringArray = sampleString.split(" ");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-03-10
        • 1970-01-01
        • 2019-06-16
        • 2015-10-22
        • 1970-01-01
        • 2020-11-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多