scanner.Delimiter()正则表达式java

时间:2014-03-09 20:59:15

标签: java regex java.util.scanner delimiter

我有一个不方便格式的字符串。这是一个例子:

(Air Fresheners,17)->(Chocolate Chips,14)->(Juice-Frozen,24)

我需要浏览此字符串并仅提取括号中的第一项。因此,使用上面的代码作为输入,我希望我的代码返回:

Air Fresheners
Chocolate Chips
Juice-Frozen

请注意,某些项目的项目名称中包含-。这些应保留并包含在最终输出中。我试图使用:

Scanner.useDelimiter(insert regex here)

......但我没有运气。完成任务的其他方法很好,但请保持相对简单。

5 个答案:

答案 0 :(得分:2)

我知道这已经过时了,我不是专家,但你不能使用replaceAll吗?如下:

String s = "(Air Fresheners,17)->(Chocolate Chips,14)->(Juice-Frozen,24)".replaceAll("(->)|[\\(\\)]|\\d+","");

for (String str : s.split(","))
{
  System.out.println(str);
}

答案 1 :(得分:0)

(Air Fresheners,17) - >(Chocolate Chips,14) - >(Juice-Frozen,24)

您可以将其视为(和

之间的所有内容)

所以,

\(.*?\,

会匹配“(Air Fresheners,”(这是为了让它变得非贪婪,并在看到逗号时停止)

所以,如果你热衷于使用正则表达式,那么只需匹配这些,并采用子字符串来摆脱(和,

答案 2 :(得分:0)

我首先要使用)->作为分隔符。在每个scanner.next()上使用子字符串去除第一个字符(括号),然后在该字符串上放置第二个扫描程序,使用,作为分隔符。在代码中,这看起来像:

    Scanner s1 = new Scanner(string).useDelimiter("\\s*)->\\s*");
    while(s1.hasNext())
    {
        Scanner s2 = new Scanner(s1.next).useDelimiter("\\s*,\\s*");
        System.out.println(s2.next.substring(1));
    }

答案 3 :(得分:0)

试试这个

  • 使用正则表达式进行拆分) - >(

    String s="(Air Fresheners,17)->(Chocolate Chips,14)->(Juice-Frozen,24)";
    
    Pattern regex = Pattern.compile("\\)->\\(");
    Matcher regexMatcher = regex.matcher(s);
    int i=0;
    while (regexMatcher.find()) {
        System.out.println(s.substring(i+1,regexMatcher.start()));
        i=regexMatcher.end()-1;
    }
    System.out.println(s.substring(i+1,s.length()-1));
    
  • 尝试String.split()方法

    String s = "(Air Fresheners,17)->(Chocolate Chips,14)->(Juice-Frozen,24)";
    
    for (String str : s.substring(1, s.length() - 1).split("\\)->\\(")) {
        System.out.println(str);
    }
    

答案 4 :(得分:0)

这可以使用正则表达式完成。我们匹配的,\\d+\\)匹配任何不包含括号或逗号的名称,,14)匹配(?:->)?部分,->匹配可能 {{1在元组之后。我们使用group(1)来获取名称(group(0)返回整个元组(Air Fresheners,17)->

    List<String> ans = new ArrayList<>();

    Matcher m = Pattern.compile("\\(([^,)(]*),\\d+\\)(?:->)?").matcher(str);
    while(m.find()){
        String s = m.group(1);
        ans.add(m.group(1));
    }

给定(Air Fresheners,17)->(Chocolate Chips,14)->(Juice-Frozen,24),此程序返回[Air Fresheners, Chocolate Chips, Juice-Frozen]