【问题标题】:Java Scanner Delimiter - Extracting Multiple Sub-strings From a Single String [closed]Java Scanner Delimiter - 从单个字符串中提取多个子字符串 [关闭]
【发布时间】:2013-06-26 16:56:38
【问题描述】:

我几乎搜索了 Stackoverflow 上的所有页面,但仍未找到如何执行此操作。我有以下字符串(正在从文件中解析):

f:   (matchQuan
     (Recipe
     (Unique FoodType "slurpee" "xxx-xxx-eee-ddd")) 
     (Unique IngredType "slurpee" "qqq-rrr-sss") "slurpee" 
     (Cup-Vol 12)).

现在,我想再次解析此字符串并提取字符串matchQuanslurpee、字符串UniqueFoodTypeRecipe 以及ID 号,即xxx-xxx-eee-ddd

我将如何从单个字符串中进行多次提取来做这样的事情?我不能使用Scanner.next() 我不相信,因为它会前进到字符串中的下一个标记。

谢谢!

【问题讨论】:

  • 提取物是什么意思?你想子串吗?
  • 您可以使用Scanner.next() 遍历您的字符串标记并将它们存储在像 List> 这样的容器中,然后如果格式没有改变,您可以通过这样做获得matchQuan list.get(0).get(0)。你知道我要做什么了吗?
  • 是的,很抱歉不清楚。我要从这个字符串中生成多个单独的子字符串。
  • @Adrian 在第一个引用中(即 slurpee)不能保证它总是一个单词。所以简单地使用.next 并不总能产生我想要的结果。我将如何处理?
  • @RichieEpiscopo 我不认为你理解我之前所说的。您应该将数据存储在某种类型的List 中,而不是一直使用.next()。或者尝试制作一个小型 DFA 来解析您的输入。

标签: java string io split


【解决方案1】:

这对你有帮助吗?

public static void getString() {
    String str = "f:   (matchQuan " +
                      "(Recipe "+
                      "(Unique FoodType" + " slurpee"+ " xxx-xxx-eee-ddd"+
                      "(Unique IngredType"+ " slurpee"+ " qqq-rrr-sss"+" slurpee" +
                       " (Cup - Vol 12)).";
    String newStr=str.replaceAll("\\(","").replaceAll("\\)","");
    String[] arrStr=newStr.split(" ");
    for (int i=0;i<arrStr.length;i++){
        System.out.println(arrStr[i]);
    }

}

【讨论】:

  • 如果您正在寻找不同的东西,请告诉我。我是这样回答你的问题的
  • 哦,这真的让我对split() 方法大开眼界——我以前不知道它存在。我将在我的实现中使用它。一个问题:为什么需要这一行:newStr=str.replaceAll("\\(","").replaceAll("\\)","");?
  • 删除 () 括号
  • @RichieEpiscopo 这是您正在寻找的答案吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-17
  • 1970-01-01
  • 2017-10-06
  • 1970-01-01
  • 1970-01-01
  • 2019-02-20
  • 1970-01-01
相关资源
最近更新 更多