6

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

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

我只想提取prasad_hv. 我该怎么做?

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

我尝试使用 split with_作为分隔符,但它分开prasadhv分开。请帮忙!

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

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

7 回答 7

10

你说

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

然后在拆分后连接索引为 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.
于 2012-10-18T06:30:48.597 回答
3

即使您想要的字符串中有很多下划线字符,这也会起作用。

str.substring(str.indexOf("_", str.indexOf("_") + 1) + 1, str.lastIndexOf("_"));
于 2012-10-18T06:32:08.777 回答
2

你可以这样做

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任何情况下都是您想要的字符串

于 2012-10-18T06:40:29.500 回答
1

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

String input = "abc_2012-10-18-05-37-23_prasad_hv_Complete";
String output = input.replaceAll("(?i)^[a-z]+_[^_]+_(\\w+)_[a-z]+$", "$1");
于 2012-10-18T06:35:56.300 回答
0

如果您确切知道它们的位置并且确定位置是恒定的,那么您可以尝试再次附加字符串。

于 2012-10-18T06:31:46.000 回答
0

我对您的问题的理解是,您希望字符串的第 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);
    }
}
于 2012-10-18T06:32:24.710 回答
0

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

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);
于 2012-10-18T06:42:08.883 回答