我有一个字符串,其中包含我想从该字符串中提取的“表名”。基本上从下面的这个字符串中,我想抓住“test_table”。字符串总是指定“表名=”,但我在遍历这个字符串并提取我需要的表名时遇到了麻烦。
我需要抓住每个字符,直到我打到逗号,但我遇到了麻烦。示例字符串如下所示:
{newModel=Table name=test_table, nameInSource=null, uuid=tid:f1f46c57b618-b9a0d09f-00000001}model
提前致谢。
在您的示例中,实际上看起来您要查找的键是“名称”而不是“表名称”(其中“表”是前一个“newModel”键的值。无论如何,在 Java 中有很多方法可以做到这一点. 假设你不知道字符串中键/值的顺序,我会使用 StringTokenizer 用逗号将其拆分,然后循环遍历每个键以查看哪个是“名称”,然后使用
String tableName;
StringTokenizer st = new StringTokenizer(in, ",");
while(st.hasMoreTokens()) {
String myString= st.nextToken();
if (myString.startsWith("name") {
tableName=myString.substr(myString.charAt("="), myString.length()+2);
}
break;
}
你试过什么?有几种方法:
您可以使用正则表达式来匹配 key=value 模式以将其拉出。
您也可以只使用更标准的 JSON 来解析(有很多库可以做到这一点)。
您可以去掉字符{ , }
并在=
在您想要的部分周围使用带有匹配组的正则表达式。下面的示例Table name=
在目标字符串中查找子字符串,然后捕获每个字符,直到在编号为 1 的组中找到逗号。最后,如果找到该模式,则返回第一组中的字符或“null”。
public static String parseTableName(String s) {
Pattern p = Pattern.compile("Table name=([^,]*)");
Matcher m = p.matcher(s);
return m.find() ? m.group(1) : null;
}
// ...
parseTableName(yourString); // => "test_table"