智能解析字符串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匹配的模式