Java扫描单词

时间:2018-03-16 20:36:49

标签: java string input keyword

我想找一个非常具体的问题:

  • 使用java和eclipse
  • 在长字符串(单词,括号,问号等)中获得了一些字符。
  • 尝试按来自关键字的进一步进度对收到的信息进行排序

所以我尝试的是:

  1. 接收传入的字符串,就像"我们有一个新成员。他的名字是:彼得。他很不错。他是该组织的成员:devceloper。他的生日也是:2001年8月13日。我们还有一个新成员 ...
  2. 扫描字符串以查找某些关键字,这些关键字将按照特定顺序进行,例如" name"," group"和"生日"
  3. 识别关键字,"不需要"以下字符(每次都相同)
  4. 提取相关信息并将其放入二维数组中。 所以我的输出应该是这样的 {{" peter"," developer"," 13.08.2001"},{" susan"," marketing" ," 02.03.1997"} ...}
  5. 为了完成这个,我找到了一个基本的脚本,它应该"提取"单词,但它仍然是错误的,所以它并没有真正有用。

    int indexOfSpace = 0; 
    int nextIndexOfSpace = 0;
    
    String sentence = "This is a sentence";
    
    int lastIndexOfSpace = sentence.lastIndexOf(" "); 
    while(indexOfSpace != lastIndexOfSpace) { 
        nextIndexOfSpace = sentence.indexOf(" ",indexOfSpace);
        String word = sentence.substring(indexOfSpace,nextIndexOfSpace);
        System.out.println("Word: " + word + " Length: " + word.length());
        indexOfSpace = nextIndexOfSpace; }
    
    String lastWord = sentence.substring(lastIndexOfSpace);
    System.out.println("Word: " + lastWord + " Length: " + lastWord.length());
    

    我没想过你给我准备好的解决方案,但我可能需要一些提示来编程步骤;)

2 个答案:

答案 0 :(得分:0)

如果您确定该字符串将始终遵循相同的表单,则可以实现正则表达式匹配。我们的想法是使用组来捕获您感兴趣的子字符串。

例如,您可以使用.*name is: (\w+)从字符串中捕获Peter。同样,您可以将其应用于其他令牌。

答案 1 :(得分:0)

您可以使用与此类似的正则表达式:

name[^:]*:\s*(\w+).*?group[^:]*:\s*(\w+).*?birthday[^:]*:\s*(\d+\.\d+\.\d+)

输入字符串:

  

我们有一个新成员。他的名字是:彼得。他很不错。他是该组织的成员:devceloper。他的生日也是:2001年8月13日。我们还有一位新成员......

它将捕获以下组:

  • 彼得
  • devceloper
  • 2001年8月13日

使用模式的匹配器,您可以迭代所有匹配。

示例代码:

String input = "we got a new member. he's name is: Peter. He is pretty nice. he "
            + "is a member of the group: devceloper. Also he's birthday is: 13.08.2001."
            + " As well we got a new member she's name is: Sara. She is pretty nice. "
            + "she is a member of the group: customer. Also her birthday is: 21.01.1998";

Pattern pattern = Pattern.compile("name[^:]*:\\s*(\\w+).*?group[^:]*:\\s*(\\w+).*?birthday[^:]*:\\s*(\\d+\\.\\d+\\.\\d+)");

Matcher matcher = pattern.matcher(input);

while(matcher.find()) {
    System.out.printf("Match found. name: %s, group: %s, birthday: %s %n", matcher.group(1), matcher.group(2), matcher.group(3));
}

输出:

Match found. name: Peter, group: devceloper, birthday: 13.08.2001 
Match found. name: Sara, group: customer, birthday: 21.01.1998