从字符串中拆分数据

时间:2017-02-19 06:21:58

标签: java

我已经在这里阅读了如何从字符串中分割数据,并且它在大多数情况下都能创造奇迹......

我要做的是从凭证文件中提取数据,该凭证文件在空格分隔的行上有四个部分,用户名,MD5哈希,明文密码包围在“,最后是一个角色。我的问题是我开始使用.split认为那将是我所需要的,但第三或[2]项偶尔会有一个空间,我需要以某种方式过滤分裂。任何想法?

从credentialLine分割的行的示例:

griffin.keyes 108de81c31bf9c622f76876b74e9285f“字母汤”动物园管理员

alert

2 个答案:

答案 0 :(得分:2)

您需要使用忽略某些空格的正则表达式。 从您提供的示例中可以看出,您要忽略的空间是引号内的空格。

如果所有值都是这种情况,您可以使用以下内容:

String[] userCreds = credentialLine.split("((?!\"[^\" ]+)\\s+(?![^ \"]+\"))");

((?!\"[^\" ]+)表示:确保在一个或多个空格之前/之后,一系列字符(除了空格或引号之外)没有引用引号。

答案 1 :(得分:0)

String stringToSearch = "griffin.keyes 108de81c31bf9c622f76876b74e9285f \"alphabet soup\" zookeeper";

Pattern p1 = Pattern.compile("(?:[^\" ]+|\"[^\"]+\")+");
Matcher m = p1.matcher(stringToSearch);
while (m.find())
{   
    System.out.println(m.group());
}

When it encounters qutoes, the group alternates to the right hand side, which matches everything between the quotes, and returns to the left hand side for matching everything up to the next space.