【问题标题】:Splitting a String in Java with underscore as delimiter使用下划线作为分隔符在 Java 中拆分字符串
【发布时间】:2012-10-18 06:27:00
【问题描述】:

我有以下字符串(这个字符串的格式是通用的)

abc_2012-10-18-05-37-23_prasad_hv_Complete

我只想提取prasad_hv。我该怎么办?

这不是我要对其执行此操作的唯一字符串,因此任何特定于该字符串的内容(例如,检查“prasad_hv”)都无济于事。

我尝试使用以_ 作为分隔符的拆分,但它分别拆分了prasadhv。请帮忙!

附:概括地说,字符串将遵循格式

string_<digit>-<digit>-<digit>-<digit>-<digit>-<digit>_<String with underscores>_<String>

【问题讨论】:

  • _complete 是否总是在每个字符串的末尾?

标签: java string split


【解决方案1】:

你说

字符串的这种格式是通用的。

然后将拆分后索引为 2 和 3 的元素连接起来:

String str = "abc_2012-10-18-05-37-23_prasad_hv_Complete";
String[] parts = str.split("_");
String extractedResult = "";
if(parts.length > 3)
   extractedResult = parts[2] + "_" + parts[3]; // prasad_hv is captured here.

【讨论】:

  • 如果有更多 _ 字符,这将不起作用,根据 OP 的描述似乎就是这种情况
  • 也有效!谢谢,但是,如果有更多下划线,将无法使用。
  • @Reddy 但 OP 说格式是通用的,我知道它会像 abc(underscore)(a date)(underscore)(value1)(underscore)(value2)(underscore)(其他一些字母)。我错了吗?
  • 他说那部分是“带下划线的字符串”,所以可能有很多下划线。
  • @BharathNaidu 所以下次在你的问题中清楚地说明你的问题。根据您目前给出的线索,我的答案是正确的!
【解决方案2】:

即使你想要的字符串中有很多下划线字符,这也可以工作。

str.substring(str.indexOf("_", str.indexOf("_") + 1) + 1, str.lastIndexOf("_"));

【讨论】:

  • 这就像一个魅力。正是我想要的!谢谢
【解决方案3】:

你可以这样做

String token[] = myString().split("_");
String resultString = "";

for(int a=0; a<token.length-1 ;a++){

   if(a == token.length-2)
   resultString = resultString+token[a]
   else
   resultString = resultString+token[a]+"_";


}

resultString 在任何情况下都是您想要的字符串

【讨论】:

    【解决方案4】:

    您可以使用正则表达式来提取数据:

    String input = "abc_2012-10-18-05-37-23_prasad_hv_Complete";
    String output = input.replaceAll("(?i)^[a-z]+_[^_]+_(\\w+)_[a-z]+$", "$1");
    

    【讨论】:

      【解决方案5】:

      如果您确切知道字符串的位置并且确定位置不变,您可以尝试再次附加字符串。

      【讨论】:

        【解决方案6】:

        我对您的问题的理解是,您希望字符串的第 3 个元素到第 (n-1) 个元素按“_”拆分(其中 n 是拆分后形成的数组的长度)。所以,代码应该是这样的:

        import java.util.Arrays;
        
        public class StringSplit {
            public static final String test = "abc_2012-10-18-05-37-23_prasad_hv_Complete";
            public static void main(String args[]){
                String[] data = test.split("_");
                System.out.println(Arrays.toString(data));
                String aim = data[2];
                for(int i=3;i<data.length-1;i++){
                    aim+="_"+data[i];
                }
                System.out.println(aim);
            }
        }
        

        【讨论】:

          【解决方案7】:

          您也可以使用正则表达式。这将导致类似的结果:

          Pattern pattern = Pattern.compile(".*[0-9]_(.*)_Complete");
          Matcher matcher = pattern.matcher("abc_2012-10-18-05-37-23_prasad_hv_Complete");
          matcher.find();
          String group = matcher.toMatchResult().group(1);
          

          【讨论】:

            猜你喜欢
            • 2011-12-17
            • 1970-01-01
            • 2012-09-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-10-24
            • 1970-01-01
            相关资源
            最近更新 更多