如何在java中拆分字符串?

时间:2012-10-04 16:27:30

标签: java

String str = "AlwinX-road-9:00pm-kanchana travels-25365445421";
String[] names = str.split("-");

我想要输出如下:

  

AlwinX道路
  下午9:00
  kanchana旅行
  25365445421

7 个答案:

答案 0 :(得分:2)

   Use pattern matching to match your requirement
    String str = "AlwinX-road-9:00pm-kanchana travels-25365445421"; 
    String regex = "(^[A-Z-a-z ]+)[-]+(\\d+:\\d+pm)[-]([a-z]+\\s+[a-z]+)[-](\\d+)";
    Matcher matcher = Pattern.compile( regex ).matcher( str);
    while (matcher.find( ))
    {
    String roadname = matcher.group(1);
    String time = matcher.group(2);
    String travels = matcher.group(3);
    String digits= matcher.group(4);
    System.out.println("time="+time);
    System.out.println("travels="+travels);
    System.out.println("digits="+digits);                           
    }

答案 1 :(得分:0)

由于您希望在第一个输出行中包含分隔符,您可以执行拆分,并将前两个元素与-合并: -

String[] names = str.split("-");

System.out.println(names[0] + "-" + names[1])
for (int i = 2;i < names.length; i++) {
    System.out.println(names[i])
}

答案 2 :(得分:0)

split()方法无法区分AlwinX-road中的短划线和字符串中的其他短划线,它会将所有短划线视为相同。您需要对生成的数组进行某种后处理。如果你总是需要连接数组中的前两个字符串,你可以这样做。如果你的字符串更复杂,你需要添加额外的逻辑来连接数组中的字符串。

答案 3 :(得分:0)

你可以采用一种方法,假设第一个' - '始终是两部分标识符的一部分。

String str = "AlwinX-road-9:00pm-kanchana travels-25365445421";
String[] tokens = str.split("-");
String[] output = new String[tokens.length - 1];
output[0] = tokens[0] + '-' + tokens[1];
System.out.println(output[0]);
for(int i = 1; i < output.length; i++){ 
  output[i] = tokens[i+1];
  System.out.println(output[i]);
}

答案 4 :(得分:0)

看起来你想要拆分(删除所有破折号但是第一个破折号。)

String str = "AlwinX-road-9:00pm-kanchana travels-25365445421";
String[] names = str.split("-");

for (String value : names)
{
    System.out.println(value);
}

所以它产生:

AlwinX
road
9:00pm
kanchana travels
25365445421

请注意,“AlwinX”和“road”我们之间也有分歧,因为它们之间有冲刺。所以你需要自定义逻辑来处理这种情况。这是一个如何做的例子(我使用StringTokenizer):

StringTokenizer tk = new StringTokenizer(str, "-", true);
String firstString = null;
String secondString = null;
while (tk.hasMoreTokens())
{
    final String token = tk.nextToken();
    if (firstString == null)
    {
        firstString = token;
        continue;
    }
    if (secondString == null && firstString != null && !token.equals("-"))
    {
        secondString = token;
        System.out.println(firstString + "-" + secondString);
        continue;
    }
    if (!token.equals("-"))
    {
        System.out.println(token);
    }
}

这将产生:

AlwinX-road
9:00pm
kanchana travels
25365445421

答案 5 :(得分:0)

从你的格式,我想你想要在时间部分之前拆分第一个。你可以这样做:

String str =yourString;
String beforetime=str.split("-\\d+:\\d+[ap]m")[0]; //this is your first token, 
                                                    //AlwinX-road in your example
String rest=str.substring(beforetime.length()+1);
String[] restNames=rest.split("-");

如果你真的需要在一个数组中一起使用,那么请看下面的代码:

String[] allTogether=new String[restNames.length+1];//the string with all your tokens
allTogether[0]=beforetime;
System.arraycopy(restNames, 0, allTogether, 1, restNames.length);

答案 6 :(得分:-1)

如果您使用“_”作为分隔符而不是“ - ”:AlwinX-road_9:00pm_kanchana travels_25365445421

新代码:

String str = new String("AlwinX-road_9:00pm_kanchana travels_25365445421");
String separator = new String("_");
String[] names = str.split(separator);
for(int i=0; i<names.length; i++){
    System.out.println(names[i]);
}