我的程序中有以下代码。当遇到连字符时,它会拆分一行并将每个单词存储在字符串数组“tokens”中。但我希望连字符在句子中遇到时也存储在字符串数组“令牌”中。
String[] tokens = line.split("-");
上面的代码拆分了句子,但也完全忽略了结果数组中的连字符。我该怎么做才能将连字符也存储在结果数组中?
编辑 : -
似乎您想在两者上进行拆分whitespaces
,hyphen
但仅保留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 (-)
。
我建议将正则表达式与 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);
}
要测试您的正则表达式,您可以使用这样的在线正则表达式测试器