Java从字符串中提取部件的最佳方法

时间:2014-08-08 21:23:32

标签: java regex

我有以下字符串;

[Username [rank] -> me] message

等级,用户名和消息的字符每次都会有所不同。我可以将这个变成三个单独的变量(用户名,排名和消息)的最佳方法是什么?

我已经尝试过:

String[] parts = text.split("] ");

但它正在抛弃错误。提前谢谢!

2 个答案:

答案 0 :(得分:5)

使用Java对正则表达式(java.util.regex)的支持,让正则表达式与3个部分匹配。

例如这一个:^\[([\w]+) \[([\w]+)\] -> \w+\] (.*)$

Java代码片段,略微改编自Ian F. Darwin的“Java Cookbook”(O'Reilly):

import java.util.regex.*;

class Test
{
    public static void main(String[] args)
    {
        String pat = "^\\[([\\w]+) \\[([\\w]+)\\] -> \\w+\\] (.*)$";
        Pattern rx = Pattern.compile(pat);
        String text = "[Username [rank] -> me] message";
        Matcher m = rx.matcher(text);
        if(m.find())
        {
            System.out.println("Match found:");
            for(int i=0; i<=m.groupCount(); i++)
            {
                System.out.println("  Group " + i + ": " + m.group(i));
            }
        }
    }
}

输出:

Match found:
  Group 0: [Username [rank] -> me] message
  Group 1: Username
  Group 2: rank
  Group 3: message

答案 1 :(得分:0)

String input = "[whatever [Is] -> me] Input";
String user, rank, message;

user = input.substring(1, input.indexOf('[', 1));
rank = input.substring(input.indexOf('[', 1), input.indexOf(']'));
message = input.substring(input.lastIndexOf(']'));

这应该可以工作但是如果你真的希望它做得对,你应该创建一个单独的对象来保存所有这些并且可以将它作为字符串输出。取决于它来自哪里以及它的去向。 -axon