【发布时间】:2014-05-16 13:13:16
【问题描述】:
有一个问题,我有一个 java 字符串:
String aString="name==p==?header=hello?aname=?????lname=lastname";
我需要在问号后面加上等号。
结果应该是键/值对:
name = "=p=="
header = "hello"
aname = "????"
lname = "lastname"
问题是aname和lname变成:
name = ""
lname = "????lname=lastname"
我的代码只是通过aString.split("\\?",2)进行拆分
这将返回 2 个字符串。一个包含键/值对,第二个字符串包含
字符串的其余部分。如果我在字符串中找到问号,我会递归第二个字符串以进一步分解它。
private String split(String aString)
{
System.out.println("Split: " + aString);
String[] vals = aString.split("\\?",2);
System.out.println(" - Found: " + vals.length);
for ( int c = 0;c<vals.length;c++ )
{
System.out.println(" - "+ c + "| String: [" + vals[c] + "]" );
if(vals[c].indexOf("?") > 0 )
{
split(vals[c]);
}
}
return ""; // For now return nothing...
}
有什么想法可以允许使用 的名称吗?
免责声明: 是的,我的正则表达式技能非常低,所以我不知道这是否可以通过正则表达式来完成。
【问题讨论】:
-
为什么
p没有被提取为key? -
@Evan 有道理。您是否知道键(名称、标题、名称、lname)始终相同或来自特定集合?
-
最终会的。现在,我试图在问号上分开。当我拆分这些时,我会得到一个字符串 "name==p==" ,然后我将拆分 ("\\=",2) 它得到键/值对
-
嗯小鸡派...我明白你在说什么...即:我可以通过读取下一个键来执行诸如提取值之类的操作。
-
问题在于您的输入。您不应使用也是特殊字符的字符(在您的情况下为
=和?)。如果您需要这些字符作为键名或值,您应该对它们进行转义,例如name=&#61;p&#61;&#61;?header=hello?aname=&#63;&#63;&#63;&#63;?lname=lastname