有一个我有一个java字符串的问题:
String aString="name==p==?header=hello?aname=?????lname=lastname";
Run Code Online (Sandbox Code Playgroud)
我需要在问号上分开,然后是等号.
结果应该是键/值对:
name = "=p=="
header = "hello"
aname = "????"
lname = "lastname"
Run Code Online (Sandbox Code Playgroud)
问题是aname和lname成为:
name = ""
lname = "????lname=lastname"
Run Code Online (Sandbox Code Playgroud)
我的代码简单地通过执行分割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...
}
Run Code Online (Sandbox Code Playgroud)
任何想法我怎么可以允许一个名字?
免责声明:是的,我的正则表达式技能非常低,所以我不知道是否可以通过正则表达式来完成.
你可以让正则表达式完成所有繁重的工作,首先将你的字符串分成几对:
String[] pairs = aString.split("\\?(?!\\?)");
Run Code Online (Sandbox Code Playgroud)
那个正则表达式意味着"a?没有后跟?",它给出了:
[name==p==, header=hello, aname=????, lname=lastname]
Run Code Online (Sandbox Code Playgroud)
然后还将结果拆分为名称/值,仅拆分第一个"=":
String[] split = pair.split("=", 2); // max 2 parts
Run Code Online (Sandbox Code Playgroud)
把它们放在一起:
String aString = "name==p==?header=hello?aname=?????lname=lastname";
for (String pair : aString.split("\\?(?!\\?)")) {
String[] split = pair.split("=", 2);
System.out.println(split[0] + " is " + split[1]);
}
Run Code Online (Sandbox Code Playgroud)
输出:
name is =p==
header is hello
aname is ????
lname is lastname
Run Code Online (Sandbox Code Playgroud)