如何在java中将字符串绑定到对象

viv*_*vek 8 java data-binding

我有一个这种格式的字符串(来自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)

W A*_*E Y 6

试试以下

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)


Ste*_* P. 3

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 [^&],这个表达式也是有效的,因为如果它可以匹配任何带有=符号的东西,那么该字符串中也会有一个 '&' ,所以[^&=]是不必要的。