2012-10-19 125 views
0

我的问题:这是非常具体的。我试图想解析以下文本的最简单的方法:如何解析name = value ^^ name = value ^^ name = value

^^domain=domain_value^^version=version_value^^account_type=account_type_value^^username=username_value^^password=password_value^^type=type_value^^location=location_value^^id=xxx^^cuid=cuid_value^^ 

它会出现,每次酷似。一些要求:

  • 并非所有这些键值对都会出现在每次。
  • 他们可能会以不同的顺序

我正在寻找的代码是这样的:

private String[] getKeyValueInfo(String allStuff) { 
    String domain = someAwesomeMethod("domain", allStuff); 
    String version = someAwesomeMethod("version", allStuff); 
    String account_type = someAwesomeMethod("account_type", allStuff); 
    String username = someAwesomeMethod("username", allStuff); 
    String password = someAwesomeMethod("password", allStuff); 
    String type = someAwesomeMethod("password", allStuff); 
    String location = someAwesomeMethod("location", allStuff); 
    String id = someAwesomeMethod("id", allStuff); 
    String cuid = someAwesomeMethod("cuid", allStuff); 
    return new String[] {domain, version, account_type, username, password, type, location, id, cuid}; 
} 

什么我不知道是什么someAwesomeMethod(String key, String allStuff)应包含的内容。

我在想什么:事情是这样的:

private String someAwesomeMethod(String key, String allStuff) { 
    Pattern patt = Pattern.compile("(?i)^^" + key + "=(.*?)^^", Pattern.DOTALL); 
    Matcher matcher = patt.matcher(allStuff); 
    if (matcher.find()) { 
    return matcher.group(1); 
    } 
    return null; 
} 

有什么不妥:

我担心它会是如果我不得不有点慢/累赘做这个很多。所以我正在寻找任何提示/建议。

+1

我把它['String.split()'](http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/String .html#split%28java.lang.String%29)不会漂浮你的船吗? –

+0

@RobertHarvey'.split()'仍然使用正则表达式,你仍然必须解析出键和参数。 – NullUserException

+0

没关系。只需在'“=”'上重新分割每个分割。 –

回答

5

工作,如果你必须这样做了很多,我会做一个地图,沿着

Map<String, String> m = new HashMap<String, String>(); 
for (String s : stuff.split("\\^\\^")) // caret needs escaping 
{ 
    String[] kv = s.split("="); 
    m.put(kv[0]) = kv[1]; 
} 

东西线再到查找你刚刚做的一个键m.get("key")

0

String.split()将为该

strVar = /* Your big long string */ 
String[] vars = strVar.split("\\^\\^"); // needs escaping 
相关问题