智能解析字符串Java

3

有没有一种规则引擎或者一些聪明的方法来做这件事情?

我有一个像这样的字符串:

test 1-2-22

这样我就可以获取这些值:

name = "test"
part_id = 1
brand_id = 2
count = 22

我有更多这样的规则,从中我知道字符串的格式。

我在想我是否可以用正则表达式来做到这一点,但是有没有更好的方法呢?

编辑:

我看到了一些非常好的答案。也许我应该更清楚地说明。这不是我可能拥有的唯一字符串类型,我可能会有一个像这样的字符串:

test 3-brand 15 – 2

解析后应该是:

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

我有不同的字符串需要处理,需要为每个字符串定义一个规则/模式。现在可选的一种方法是使用正则表达式。


所有的字符串都会有这种格式吗? - Sionnach733
4个回答

3
您可以使用以下表达式在空格和破折号周围进行分割:
[ -]

然后你会发现从索引 0 开始,每个组件都有不同的值。

在Java中:

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

2
你可以使用这个 Pattern 正则表达式
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) );
}

我该如何在新的Java 7 JDL中使用您的模式与命名组匹配? - Gandalf StormCrow

0

类似于这样:

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和计数转换为整数。


0
在这种情况下,适当的“split”操作(或其他手动字符串处理)可能是最容易的,因为您可以明确查找空格和破折号。
对于更复杂的模式,您可以使用“antlr”将其标记化为(例如)一个“identifier”和三个“number”标记,然后解析它,但这似乎在这里有些过度。 (这将为您提供一个“规则引擎”。)
一般而言:您可能需要阅读有关此内容的“解析”和“上下文无关语法”的相关资料。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接