智能解析字符串java

智能解析字符串java,java,regex,parsing,Java,Regex,Parsing,是否有某种规则引擎或某种智能方法可以做到这一点 我有这样一个字符串: test 1-2-22 test 3-brand 15 – 2 这样我就可以得到这些值: name = "test" part_id = 1 brand_id = 2 count = 22 我有更多这些所谓的规则,从中我知道字符串的格式 我在想我可以用正则表达式来做这个,但是有没有更好的方法来代替呢 编辑: 我看到了一些非常好的答案。也许我应该更清楚一点。 这不是我可能拥有的唯一字符串类型,我可以拥有如下字符串: tes

是否有某种规则引擎或某种智能方法可以做到这一点

我有这样一个字符串:

test 1-2-22
test 3-brand 15 – 2
这样我就可以得到这些值:

name = "test"
part_id = 1
brand_id = 2
count = 22
我有更多这些所谓的规则,从中我知道字符串的格式

我在想我可以用正则表达式来做这个,但是有没有更好的方法来代替呢

编辑:

我看到了一些非常好的答案。也许我应该更清楚一点。 这不是我可能拥有的唯一字符串类型,我可以拥有如下字符串:

test 1-2-22
test 3-brand 15 – 2
其中,解析后应为:

name = "test"
part_id = 2
brand_id = 3
count = 15

所以我可以有不同的字符串,我需要为每个字符串定义一个规则/模式。做这件事的好方法是什么?Regex现在是一个选项

您可以使用以下表达式拆分空格和破折号:

[ -]
然后,您将在从
0
开始的索引中找到不同的组件

在Java中:

String input = "test 1-2-22";
String[] results = input.split("[ -]");

您可以使用这个
模式regex

Pattern pattern = Pattern.compile("^([a-zA-Z]+)\\s*([^-]+)-([^-]+)-([^-]+)$");
那么这个代码应该可以工作了:

String line = "test 1-2-22";
Pattern pattern = Pattern.compile("^([a-zA-Z]+)\\s*([^-]+)-([^-]+)-([^-]+)$");
Matcher matcher = pattern.matcher(line);
if (matcher.find()) {
   System.out.printf("name:%s, part_id:%s, brand_id:%s, count:%s%n",
       matcher.group(1), matcher.group(2), matcher.group(3), matcher.group(4) );
}

在这种特殊情况下,合适的
split
操作(或其他手动字符串处理)可能最简单,因为您需要显式查找空格和破折号

对于更复杂的模式,您可以查看
antlr
,将其标记为(例如)一个
identifier
和三个
number
标记,然后对其进行解析,但这似乎有些过分。(这将为您提供一个“规则引擎”,thugh。)

一般情况下:您可能需要阅读有关解析和上下文无关语法的内容。

类似以下内容:

String s = "test 1-2-22";
String[] vars = s.split("[ -]");
String name = vars[0];
String part_id = vars[1];
String brand_id = vars[2];
String count  = vars[3];
如果出现空格或“-”,这将拆分字符串。
如果需要,您可以将id和count转换为int

所有字符串都有这种格式吗?我如何使用命名组与新Java7JDL匹配的模式