8

この形式の文字列があります (EBS Payment Gateway からの応答)

key1=value1&key2=value2&key3=value3

split メソッドを使用せずにこのクラス オブジェクトにバインドする方法は?

public class MyClass {

    private String key1;
    private String key2;
    private String key3;
    // getter and setter methods
    ...
}
4

7 に答える 7

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
}

出力:

   key1
   key2  
   key3

もちろん、これは次のように短縮できます。

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
}

壊す:

"&?([^&]+)="; 

&?: 0 または 1 と&
[^&]+一致する 1 つ以上の文字が等しくない&
([^&]+)上記の文字をキャプチャする (それらを抽出できます)
&?([^&]+)=0 または 1 で始まり、&で終わるように上記の文字をキャプチャします=

=注: inを除外しませんでしたが[^&]、この式は機能します。これは、記号が含まれる何かと一致する=場合、その文字列にも「&」が含まれるため[^&=]不要であるためです。

于 2013-07-09T11:46:22.760 に答える
2

文字列を分割して、セッターを使用して設定します。

String str = "key1=value1&key2=value2&key3=value3";
String[] split = str.split("&");

MyClass obj = new MyClass();

obj.setKey1(split[0].split("=")[1]);
obj.setKey2(split[1].split("=")[1]);
obj.setKey3(split[2].split("=")[1]);

最初の分割では、文字列を&記号で分割します。

キー1=値1 [0]

キー2=値2 [1]

key3=値 [2]

その後、=シンボルのそれぞれを分割します

キー1 [0][0]

値1 [0][1]

キー2 [1][0]

値2 [1][1]

キー3 [2][0]

値3 [2][1]

したがって、最初のコード ブロックと同様に、以下の説明にsplit[0].split("=")[1]あるものがあります。[0][1]それはvalue1

それは速くて汚いですが、完全にうまく機能します:)

于 2013-07-09T11:22:45.877 に答える
1

beanutils と map を使ってみてください

String[] keys = "key1=value1&key2=value2&key3=value3".split("&");
HashMap keyMap = new HashMap();
for(String key:keys){
String[] pair = key.split("=");
keyMap.put(pair[0],pair[1]);
}
MyClass  myCls=new MyClass();
BeanUtils.populate(myCls,keyMap);
于 2013-07-09T11:43:47.413 に答える
1

Guava を使用すると、次のことができます。

String str = "key1=value1&key2=value2&key3=value3";
Map<String, String> map = Splitter.on('&').withKeyValueSeparator("=").split(str);

そして、あなたが望むものは何でもキーと値で行うことができます。例えば

mc.setKey1(map.get("key1")); // will set key1 to value1
于 2013-07-09T11:45:11.040 に答える
0
You can use java reflection :

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class MyClass {

  private String key1;
  private String key2;
  private String key3;

  public void setKey1(String key1) {
    this.key1 = key1;
  }

  public void setKey2(String key2) {
    this.key2 = key2;
  }

  public void setKey3(String key3) {
    this.key3 = key3;
  }

  public void setKey(String input) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException {
    String[] strings = input.split("&");
    String methodName = null;
    Method setter = null;
    for(String keyValue : strings) {
      String[] keyValuePair = keyValue.split("=");
      methodName = toSetterMethod(keyValuePair[0]);
      setter = getMethod(methodName);
      if (setter != null) {
        setter.setAccessible(true);
        setter.invoke(this, keyValuePair[1]);
      }
    }
  }

  private Method getMethod(String methodName) {
    try {
      Method[] methods = MyClass.class.getMethods();
      for (Method method : methods) {
        if (method.getName().equals(methodName)) {
          return method;
        }
      }
    } catch (SecurityException e) {
    }
    return null;

  }

  private String toSetterMethod(String property) {
    String setter = "set";
    setter += property.substring(0, 1).toUpperCase() + property.substring(1);
    return setter;
  }
  public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException {
    String input = "key1=value1&key2=value2&key3=value3";
    MyClass myClass = new MyClass();
    myClass.setKey(input);

    System.out.println(myClass.key1);
    System.out.println(myClass.key2);
    System.out.println(myClass.key3);


  }

}
于 2013-07-09T12:01:19.773 に答える
0

これは、java の split 要素を使用して行うことができます。文字列を変数に格納し、java で分割メソッドを呼び出します。

string = "key1=value1&key2=value2&key3=value3";
String[] keys = string.split("&");

次のステップでは、「=」文字を使用して、配列キーの各要素に対して分割を実行できます。

参照 : Java で文字列を分割する方法

于 2013-07-09T11:32:49.173 に答える