【问题标题】:Need the words between the " - " ONLY string splitting [duplicate]需要“ - ”之间的单词仅字符串拆分[重复]
【发布时间】:2016-03-24 03:50:46
【问题描述】:

嘿,我需要拆分字符串的帮助。问题是我只需要“-”之间的单词。 例如:

ABC_DEF-HIJ (KL MNOP_QRS)

我需要将 DEF 存储在 string1 中,将 HIJ 存储在 string2 中

其他一些格式是

AB (CDE)_FGH IJK/LMN-OPQ (RST

这里也是 string1 = LMN

string2 = OPQ

我只需要“-”前后的单词

【问题讨论】:

  • 您已经尝试过做什么?你能展示你的代码吗?
  • 一些提示:使用indexOf("-"),然后在两个方向检查有多少个字母,直到出现非字母字母。然后你知道哪些字符与构建两个字符串相关。

标签: java string substring


【解决方案1】:

考虑使用正则表达式的这种方法:

public static void main(String[] args) {

    Pattern p = Pattern.compile("(\\w{3})-(\\w{3})");
    Matcher m = p.matcher("AB (CDE)_FGH IJK/LMN-OPQ (RST");
    if(m.find()) {
        System.out.println("1: " + m.group(1));
        System.out.println("2: " + m.group(2));
    }
}

生产

1: LMN
2: OPQ

如果您的“单词”长度超过 3 个字符,您可能需要将 {3} 更改为 + 以表示任何 >= 1

【讨论】:

    【解决方案2】:

    所以基本上你先用-分割,然后每边用一个非单词字符。

    所以你可以试试:

    String s = "ABC_DEF-HIJ (KL MNOP_QRS)";
    String[] splits = s.split("-");  // {"ABC_DEF", "HIJ (KL MNOP_QRS)"}
    
    String[] lefts = split[0].split("[^a-zA-Z]");  // {"ABC", "DEF"}
    String[] rights = split[1].split("[^a-zA-Z]"); // {"HIJ", "", "KL", "MNOP", "QRS"}
    
    String string1 = lefts[lefts.length - 1]; // "DEF""
    String string2 = rights[0];               // "HIJ"
    

    【讨论】:

    • 哇,谢谢兄弟:D 它就像我正在寻找的魅力一样 :)
    【解决方案3】:

    试试这个:

    String[] parts = yourString.split("-");
    //You can then access each part with: parts[index]
    

    【讨论】:

      【解决方案4】:
      import java.util.regex.Matcher;
      import java.util.regex.Pattern;
      
      public class StringExtractTest {
      
          private static class ExtractResult {
              private ExtractResult(String string1, String string2) {
                  this.string1 = string1;
                  this.string2 = string2;
              }
              private String string1;
              private String string2;
              public String getString1() {
                  return string1;
              }
              public String getString2() {
                  return string2;
              }
          }
      
          public static ExtractResult extract(String input) {
              Pattern p = Pattern.compile("([a-zA-Z]+)-([a-zA-Z]+)");
              Matcher m = p.matcher(input);
              if (m.find()) {
                  return new ExtractResult(m.group(1), m.group(2));
              } else {
                  return null;
              }
          }
      
          public static void main(String[] args) {
              String inputs[] = {
                      "ABC_DEF-HIJ (KL MNOP_QRS)",
                      "AB (CDE)_FGH IJK/LMN-OPQ (RST"
              };
              for (String input : inputs) {
                  ExtractResult result = extract(input);
                  if (result != null) {
                      System.out.println(input + " ... string1 = [" + result.getString1() + "] string2 = [" + result.getString2() + "]");
                  }
              }
          }
      
      }
      

      输出是:

      ABC_DEF-HIJ (KL MNOP_QRS) ... string1 = [DEF] string2 = [HIJ]
      AB (CDE)_FGH IJK/LMN-OPQ (RST ... string1 = [LMN] string2 = [OPQ]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-14
        • 1970-01-01
        • 1970-01-01
        • 2012-12-14
        • 2019-11-01
        • 2020-02-14
        • 2014-10-21
        • 1970-01-01
        相关资源
        最近更新 更多