1

我的程序中有以下代码。当遇到连字符时,它会拆分一行并将每个单词存储在字符串数组“tokens”中。但我希望连字符在句子中遇到时也存储在字符串数组“令牌”中。

String[] tokens = line.split("-");

上面的代码拆分了句子,但也完全忽略了结果数组中的连字符。我该怎么做才能将连字符也存储在结果数组中?

4

2 回答 2

1

编辑 : -

似乎您想在两者上进行拆分whitespaceshyphen但仅保留hyphen其中array(因为,我从您的这一行推断-将每个单词存储在 String Array 中),您可以使用:-

String[] tokens = "abc this is-a hyphen def".split("((?<=-)|(?=-))|\\s+");
System.out.println(Arrays.toString(tokens));

输出: -

[abc, this, is, -, a, hyphen, def]

对于spaces连字符前后的处理,您可以先使用replaceAll方法修剪这些空格,然后进行拆分:-

"abc this is - a hyphen def".replaceAll("[ ]*-[ ]*", "-")
                            .split("((?<=-)|(?=-))|\\s+");

上一个答案:-

你可以使用这个: -

String[] tokens = "abc-efg".split("((?<=-)|(?=-))");
System.out.println(Arrays.toString(tokens));

输出 : -

[abc, -, efg]

empty它在 .之前和之后的一个字符上分裂hyphen (-)

于 2012-11-28T09:30:06.313 回答
0

我建议将正则表达式与 Java 模式和匹配器结合使用。例子:

String line = "a-b-c-d-e-f-";
Pattern p = Pattern.compile("[^-]+|-");
Matcher m = p.matcher(line);
while (m.find())
{
  String match = m.group();
  System.out.println("match:" + match);
}

要测试您的正则表达式,您可以使用这样的在线正则表达式测试

于 2012-11-28T09:33:19.270 回答