Java 当子元素中有空格时,如何解析由空格分隔的字符串?

Java 当子元素中有空格时,如何解析由空格分隔的字符串?,java,regex,Java,Regex,输入字符串如下所示,每个元素由一个空格分隔: “Fri,2014年5月23日10:17:54-0400(美国东部夏令时)”“这是一个主题”((NIL-NIL\'10013001906\'domainname\) 输出应为字符串数组: a[0]=“Fri,2014年5月23日10:17:54-0400(美国东部时间)”,a[1]=“这是一个主题”,a[2]=((NIL-NIL \“10013001906 \”“domainname\”)) 我得到了一个java版本的正则表达式工作,下面是示例代码:

输入字符串如下所示,每个元素由一个空格分隔:

“Fri,2014年5月23日10:17:54-0400(美国东部夏令时)”“这是一个主题”((NIL-NIL\'10013001906\'domainname\)

输出应为字符串数组:

a[0]=“Fri,2014年5月23日10:17:54-0400(美国东部时间)”,a[1]=“这是一个主题”,a[2]=((NIL-NIL \“10013001906 \”“domainname\”)

我得到了一个java版本的正则表达式工作,下面是示例代码:

private static void parseWholeEnvelope(){
String envelope = "\"Tue, 29 Sep 2009 12:00:00 +0100\" \"IMAPenvelope   test\""
     +" ((\"Test User1\" NIL \"testuser\" \"imaptest.net\"))"
     +" ((\"Test User2\" NIL \"testuser\" \"imaptest.net\"))"
     +" ((\"Test User3\" NIL \"testuser\" \"imaptest.net\"))"
     +" ((\"IMAP User\" NIL \"imap\" \"imaptest.net\")"
     +  " (\"Another User\" NIL \"a.n.other\" \"imaptest.net\"))"
     +" NIL NIL NIL"
     +" \"<4A671940.7030003@imaptest.net>\"";
String pattern4Envelope = "((\\((\\([^\\)]+\\)\\s*)+\\))|(\"[^\"]*\")|(NIL|\"[^\"]* \"))+?";
Pattern pattern = Pattern.compile(pattern4Envelope, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(envelope);
while (matcher.find()) {
    System.out.println("Found the text \"" + matcher.group()
    + "\" starting at " + matcher.start()
    + " index and ending at index " + matcher.end());
}
}
private static void parseWholeEnvelope(){
字符串信封=“\”2009年9月29日星期二12:00:00+0100\“\”IMAPEN开发测试“
+((“测试用户1”“无”“测试用户”“imaptest.net\”)
+((“测试用户2”“无”“测试用户”“imaptest.net\”)
+((“测试用户3”“无”“测试用户”“imaptest.net\”)
+((“IMAP用户”NIL“IMAP\”IMAP\”imaptest.net\))
+“(\'other User\'NIL\'a.n.other\'imaptest.net\”)”
+“零零零零”
+" \"\"";
字符串模式4Envelope=“(\\((\\([^\)]+\\)\\s*)+\\)(\“[^\”]*\”)(无“[^\”]*\”)+?”;
Pattern=Pattern.compile(pattern4Envelope,Pattern.Pattern不区分大小写);
Matcher Matcher=pattern.Matcher(信封);
while(matcher.find()){
System.out.println(“找到文本\”+matcher.group()
+“\”从“+matcher.start()开始
+“索引并在索引处结束”+matcher.end());
}
}

可用于此特定实例的某些方法是:

Regex reg = new Regex("\" [\"(]");
或者任何你想用的语言。这一个查找一个引号,后跟一个空格,然后后跟另一个引号或一个空括号

您将遇到的唯一问题是,它将拼接第一个的结束引号、第二个的结束引号和开始引号以及第三个的打开引号。不幸的是,以我有限的知识,我无法为你做得更好

收益率:

string[0] = "Fri, 23 May 2014 10:17:54 -0400 (EDT)
string[1] = This is a subject
string[2] = (NIL NIL \"10013001906\" \"domainname\"))

转义序列和引号不用于简化输出。

字符串之间没有空格分隔,而是用未转义的双引号分隔。你想使用正则表达式进行拆分吗?解析并不特别困难,尽管你使用的是哪种语言会有帮助…你的字符串总是有这种模式吗?如果是这样,匹配on(and)将帮助您确定每个字符串的开始和结束。