【问题标题】:How to split the following string如何拆分以下字符串
【发布时间】:2014-12-15 00:04:09
【问题描述】:

我正在尝试拆分以下格式的字符串: Drops 3:6-9 并将它们存储在单独的数据类型中,一种用于 Drops,一种用于 3,另一种用于 6-9 我该怎么做?到目前为止,我有:

Scanner s = new Scanner(System.in);
System.out.println("Enter the name, number, and between which lines you want to search");
String input = s.next();
String parts[] = input.split(" "); 
int num1 = Integer.parseInt(parts[parts.length-1];
int num2 = Integer.parseInt(parts[parts.length-2];
int num3 = Integer.parseInt(parts[parts.length-3];
String s = " ";
for(int i = 0; i < parts.length; i++) {
    s += parts[i];
}

【问题讨论】:

  • 如果你知道字符永远不会改变,你可以使用 .Substring(start index, stop index);否则我会尝试正则表达式
  • 你想要一个像["Drops", "3", "6-9"]这样的数组吗?
  • 好吧,我更喜欢像 ["Drops", "3", "6", "9"] 这样的数组,因为我正在尝试搜索文本文档并且 6 - 9 指定不同的行,但是如果可以使用“6-9”,那么也可以。
  • 所以这里的字符串是参考书目?

标签: java arrays regex string split


【解决方案1】:

您可以使用此正则表达式在空格、冒号或连字符上进行拆分:

[ :-]

在 Java 中:

String parts[] = input.split("[ :-]"); // [Drops, 3, 6, 9]

【讨论】:

  • 我如何将这些存储在不同的数据类型中?
  • 在单独的变量中? int numX = Integer.parseInt(parts[X]) 代表 1-3 之间的所有 X
【解决方案2】:

您可以单独获取信息。

    Scanner scan = new Scanner(System.in);
    String name = scan.nextLine();
    int number = scan.nextInt();
    String lines = scan.next();
    int startIndex = Integer.parseInt(lines.substring(0,lines.indexOf('-')));
    int lastIndex = Integer.parseInt(lines.substring(lines.indexOf('-')+1,lines.length()));

【讨论】:

    【解决方案3】:

    如果您想对输入内容进行更多验证和控制,请考虑使用Pattern 和相应的Matcher,而不是简单的拆分功能。

    // String input = "Drop 3:6-9";
    Pattern pattern = Pattern.compile("(\\S+)\\s+(\\d+):(\\d+)-(\\d+)");
    Matcher matcher = pattern.matcher(input);
    if (matcher.find())
        String name = matcher.group(1); // "Drop"
        String number = matcher.group(2); // "3"
        String betweenStart = matcher.group(3); // "6"
        String betweenEnd = matcher.group(4); // "9"
    }
    // else: invalid input, error handling left as an exercise for the reader
    

    请注意,Pattern 实例是不可变且线程安全的,因此您只需创建一次。 Matcher 不是线程安全的,因此通常最容易为每个输入使用一个新的。

    【讨论】:

    • 它并不总是会丢弃,这取决于用户搜索的内容,但是我只是尝试将它与输入一起使用,但它没有给出正确的输出。
    • 您可能一直在使用以前的版本;从那以后我已经对其进行了编辑,并且它可以在本地工作(有一两个错字)。
    • 还是没有出来,我用 System.out.println(name); 完全复制了代码。在底部查看名称的输出,但它一直在 !matcher.find 部分输出字符串。
    • &gt; System.out.println(java.util.Arrays.asList(name, number, betweenStart, betweenEnd).toString()); 为我生成:[Drop, 3, 6, 9] 如果find() 返回 false,则Matcher.group 结果将无效,所以您能否通过“在 !matcher 中输出字符串”来澄清您的意思.查找部分”?我做了另一个编辑,希望能更清楚地说明这一点。
    • 没关系,我设法让它与用户输入一起工作,非常感谢!
    【解决方案4】:

    这里就这么简单:

    String s = "Drops 3:6-9";
    String[] words = s.split(" ");
    String[] words1 = words[1].split(":");
    String[] words2 = words1[1].split("-");
    String[] words3 = new String []{words[0], words1[0],words2[0], words2[1]};
    

    然后你会得到:

    String dataType1 = words3[0]; // "Drop"
    String dataType2 = words3[1]; // "3"
    String dataType3 = words3[2]; // "6"
    String dataType4 = words3[3]; // "9"
    

    【讨论】:

      【解决方案5】:

      如果表单中的输入允许(drop 3:6-9),那么这段代码可以工作:

      String parts1[] = input.splite(" ");
      String parts2[] = parts1[1].splite(":");
      
      String part1 = parts1[0]; // Drops
      int num = Integer.valueOf(parts2[0]); //3
      String part2 = parts2[1] // 6-9
      

      【讨论】:

        猜你喜欢
        • 2022-01-15
        • 2013-10-12
        • 1970-01-01
        • 2020-06-20
        • 1970-01-01
        • 2011-12-17
        • 2020-04-09
        • 2014-06-29
        • 2023-03-17
        相关资源
        最近更新 更多