在java中拆分字符串的正则表达式
我想把字符串[AO_12345678,Real Estate]分成AO_12345678和Real Estate 如何使用正则表达式在Java中实现这一点 我面临的主要问题是避免[和]在java中拆分字符串的正则表达式,java,string,split,Java,String,Split,我想把字符串[AO_12345678,Real Estate]分成AO_12345678和Real Estate 如何使用正则表达式在Java中实现这一点 我面临的主要问题是避免[和] 请帮助假设所有输入的格式都是一致的,一个简单的方法是完全忽略正则表达式,然后将其拆分。类似于以下内容的操作将起作用: String[] parts = input.split(","); // parts is ["[AO_12345678", "Real Estate]"] String firstWithou
请帮助假设所有输入的格式都是一致的,一个简单的方法是完全忽略正则表达式,然后将其拆分。类似于以下内容的操作将起作用:
String[] parts = input.split(","); // parts is ["[AO_12345678", "Real Estate]"]
String firstWithoutBrace = parts[0].substring(1);
String secondWithoutBrace = parts[1].substring(0, parts[1].length() - 1);
String first = firstWithoutBrace.trim();
String second = secondWithoutBrace.trim();
当然,您可以根据自己的意愿进行调整-例如,您可能希望在移除支架之前检查支架是否存在。或者,您可能希望在逗号之前保留任何空格作为第一个字符串的一部分。但是,这应该为您修改特定需求提供依据
和在这样的一个简单的例子中,我更喜欢上面的代码和提取两个字符串的正则表达式——我认为前者更清楚!p> 假设所有输入的格式都是一致的,一个简单的方法是完全忽略正则表达式,然后将其拆分。类似于以下内容的操作将起作用:
String[] parts = input.split(","); // parts is ["[AO_12345678", "Real Estate]"]
String firstWithoutBrace = parts[0].substring(1);
String secondWithoutBrace = parts[1].substring(0, parts[1].length() - 1);
String first = firstWithoutBrace.trim();
String second = secondWithoutBrace.trim();
当然,您可以根据自己的意愿进行调整-例如,您可能希望在移除支架之前检查支架是否存在。或者,您可能希望在逗号之前保留任何空格作为第一个字符串的一部分。但是,这应该为您修改特定需求提供依据
和在这样的一个简单的例子中,我更喜欢上面的代码和提取两个字符串的正则表达式——我认为前者更清楚!p> 它真的必须是正则表达式吗
如果没有:String s = "[AO_12345678, Real Estate]";
String[] split = s.substring(1, s.length()-1).split(", ");
它真的必须是正则表达式吗 如果没有:
String s = "[AO_12345678, Real Estate]";
String[] split = s.substring(1, s.length()-1).split(", ");
我会采取务实的方式:
String org = "[AO_12345678, Real Estate]";
String plain = null;
if(org.startsWith("[") {
if(org.endsWith("]") {
plain = org.subString(1, org.length());
} else {
plain = org.subString(1, org.length() + 1);
}
}
String[] result = org.split(",");
如果字符串总是被“[]”包围,您可以不检查它而直接对其进行子字符串处理。我会用实用的方法:
String org = "[AO_12345678, Real Estate]";
String plain = null;
if(org.startsWith("[") {
if(org.endsWith("]") {
plain = org.subString(1, org.length());
} else {
plain = org.subString(1, org.length() + 1);
}
}
String[] result = org.split(",");
如果字符串始终被“[]”包围,则可以不检查就将其子字符串化。也可以使用StringTokenizer。代码如下:
String str="[AO_12345678, Real Estate]"
StringTokenizer st=new StringTokenizer(str,"[],",false);
String s1 = st.nextToken();
String s2 = st.nextToken();
s1=AO_12345678
s1=房地产
有关StringTokenizer的阅读,请参阅javadocs
您还可以使用StringTokenizer。代码如下:
String str="[AO_12345678, Real Estate]"
StringTokenizer st=new StringTokenizer(str,"[],",false);
String s1 = st.nextToken();
String s2 = st.nextToken();
s1=AO_12345678
s1=房地产
有关StringTokenizer的阅读,请参阅javadocs
使用正则表达式重新捕获组的另一个选项:
private static void extract(String text) {
Pattern pattern = Pattern.compile("\\[(.*),\\s*(.*)\\]");
Matcher matcher = pattern.matcher(text);
if (matcher.find()) { // or .matches for matching the whole text
String id = matcher.group(1);
String name = matcher.group(2);
// do something with id and name
System.out.printf("ID: %s%nName: %s%n", id, name);
}
}
如果速度/记忆是一个问题,RE可以优化为使用所有格量词而不是贪婪量词
\\[[^,]*+,\\s*+[^\\]*+\]使用正则表达式重新捕获组的另一个选项:
private static void extract(String text) {
Pattern pattern = Pattern.compile("\\[(.*),\\s*(.*)\\]");
Matcher matcher = pattern.matcher(text);
if (matcher.find()) { // or .matches for matching the whole text
String id = matcher.group(1);
String name = matcher.group(2);
// do something with id and name
System.out.printf("ID: %s%nName: %s%n", id, name);
}
}
如果速度/记忆是一个问题,RE可以优化为使用所有格量词而不是贪婪量词
\\[[^,]*+,\\s*+[^\\]]*+\]数据是否总是以[]结尾和开始?数据是否总是以[]结尾和开始?广泛的字符串操作很可能比简单的正则表达式操作更具可读性。我坚持认为,广泛的字符串操作很可能比简单的正则表达式操作更可读。我会坚持的。