在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

我想把字符串[AO_12345678,Real Estate]分成AO_12345678和Real Estate

如何使用正则表达式在Java中实现这一点

我面临的主要问题是避免[和]
请帮助

假设所有输入的格式都是一致的,一个简单的方法是完全忽略正则表达式,然后将其拆分。类似于以下内容的操作将起作用:

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*+[^\\]]*+\]

数据是否总是以[]结尾和开始?数据是否总是以[]结尾和开始?广泛的字符串操作很可能比简单的正则表达式操作更具可读性。我坚持认为,广泛的字符串操作很可能比简单的正则表达式操作更可读。我会坚持的。