解析包含分隔符的字符串

时间:2016-07-08 23:28:34

标签: java string algorithm parsing

所以,我正在尝试编写一个函数并解析一个字符串并将它们放入一个哈希值,用户可以选择它们使用的分隔符/分隔符。

〔实施例: 解析(输入,分离器)

如果子字符串不包含分隔符,则很容易解析字符串, 例如: ABC.ASD.ASD.D.WE.R.Q.VF.G.R.T.QWE.E.ERRR

Parse by(“。”)很简单,但如果子字符串包含分隔符会怎么样。 例如: Math131.Math141.Math151.Math.161, 在第二种情况下,您将如何定义规则/解析函数?

由于 森

2 个答案:

答案 0 :(得分:3)

我看到了三种可能的方法:

  1. 您可以通过确保您拥有良好(明确指定)的输入数据来防止出现这种情况。

  2. 您可以使用传统的编程方法,首先要确定您的要求并确定准确的预期行为,然后实施。

    • Math131.Math141.Math151.Math.161的情况下,规则可能是"列表元素由一个或多个字母组成,可选地后跟.,后跟一个或多个数字&#34 ;;然后你可以使用正则表达式\.(?!\d)进行拆分(.后面没有数字)。
  3. 您可以使用机器学习方法,在这里您可以获得大量正确拆分字符串的示例,并使用这些示例来训练神经网络根据需要拆分字符串。请注意,这不会有100%的成功率。

  4. 如果你可以管理它,那么#1可能是最好的方法,但我发现你还在大学,所以#2和#3可能是很好的学习经历。

答案 1 :(得分:0)

如果输入类型定义明确,您可以构造一个正则表达式来解析输入字符串。扩展您已指定的示例,您可以执行类似的操作(如果"而且我不道歉。"不是Java中的通配符):

Pattern pattern = Pattern.compile("Math\.+\\d+");
Matcher matcher = pattern.matcher(input);
if (matcher.find())
{
    System.out.println(matcher.group(1));
}

值得注意的是,上述内容并不关心分隔符本身是什么。您只需将有效令牌定义为正则表达式即可。这样你就可以解释可能与标准的偏差。然后循环遍历所有匹配并打印它们。当然,你可以用匹配做任何你喜欢的事情。