我有一个这种格式的字符串(来自EBS Payment Gateway的回复)
key1=value1&key2=value2&key3=value3
Run Code Online (Sandbox Code Playgroud)
如何在不使用split方法的情况下绑定到此类对象?
public class MyClass {
private String key1;
private String key2;
private String key3;
// getter and setter methods
...
}
Run Code Online (Sandbox Code Playgroud)
试试以下
public class MyClass {
private String key1;
private String key2;
private String key2;
public MyClass(String k1,String k2,String k3)
{
Key1 = k1;
Key2 = k2;
Key3 = k3;
}
// getter and setter methods
...
}
Run Code Online (Sandbox Code Playgroud)
同时创建类的对象
String response = "key1=value1&key2=value2&key3=value3";
String[] keys = response.split("&");
MyClass m = new MyClass(keys[0].split("=")[1],keys[1].split("=")[1],keys[2].split("=")[1])
Run Code Online (Sandbox Code Playgroud)
String template = "key1=value1&key2=value2&key3=value3";
String pattern = "&?([^&]+)=";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(template);
while (m.find())
{
System.out.println(m.group(1)); //prints capture group number 1
}
Run Code Online (Sandbox Code Playgroud)
输出:
key1
key2
key3
Run Code Online (Sandbox Code Playgroud)
当然,这可以简化为:
Matcher m = Pattern.compile("&?([^&]+)=").matcher("key1=value1&key2=value2&key3=value3");
while (m.find())
{
System.out.println(m.group(1)); //prints capture group number 1
}
Run Code Online (Sandbox Code Playgroud)
分解:
"&?([^&]+)=";
Run Code Online (Sandbox Code Playgroud)
&?: 表示 0 或 1&
[^&]+匹配 1 个或多个不等于的字符&
([^&]+)捕获上述字符(允许您提取它们)
&?([^&]+)=捕获上述字符,使其以 0 或 1 开头&并以 结尾=
注意:即使我们没有排除=in [^&],这个表达式也是有效的,因为如果它可以匹配任何带有=符号的东西,那么该字符串中也会有一个 '&' ,所以[^&=]是不必要的。
| 归档时间: |
|
| 查看次数: |
2862 次 |
| 最近记录: |