在java中遇到连字符时拆分句子

在java中遇到连字符时拆分句子,java,regex,string,split,Java,Regex,String,Split,我的程序中有以下代码。当遇到连字符时,它会分割一行,并将每个单词存储在字符串数组“tokens”中。但我希望在句子中遇到连字符时,连字符也存储在字符串数组“tokens”中 String[] tokens = line.split("-"); 上面的代码拆分了句子,但也完全忽略了结果数组中的连字符。 如何将连字符也存储在结果数组中?编辑:- [abc, -, efg] 似乎您希望在空格和连字符上进行拆分,但只在数组中保留连字符(我从您的此行推断-将每个单词存储在字符串数组中),您可以使用以下

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

String[] tokens = line.split("-");
上面的代码拆分了句子,但也完全忽略了结果数组中的连字符。
如何将连字符也存储在结果数组中?

编辑:-

[abc, -, efg]
似乎您希望在
空格
连字符
上进行拆分,但只在
数组
中保留
连字符
(我从您的此行推断-将每个单词存储在字符串数组中),您可以使用以下方法:-

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

要在连字符前后处理
空格
,可以首先使用
replaceAll
方法修剪这些空格,然后执行拆分:-

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

它在
连字符(-)
前后的
空字符上拆分

[abc, -, efg]
似乎您希望在
空格
连字符
上进行拆分,但只在
数组
中保留
连字符
(我从您的此行推断-将每个单词存储在字符串数组中),您可以使用以下方法:-

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

要在连字符前后处理
空格
,可以首先使用
replaceAll
方法修剪这些空格,然后执行拆分:-

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

它在
连字符(-)
前后的
空字符上拆分。我建议将正则表达式与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);
}

要测试正则表达式,您可以使用在线regexp测试仪,如

,我建议将正则表达式与Java模式和Matcher结合使用。例如:

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);
}

要测试正则表达式,您可以使用在线regexp测试仪,如

您不能手动添加连字符吗?另外,如果假设您有“abc xyz”,那么您希望使用类似于“abc-”的abc连字号,或者使用类似于-xyz的xyz连字号,您不会说您希望在哪里使用连字号。作为一个单独的元素或附加到一个单词?我想要像“abc”-“xyz”这样的输出也许这个解决方案可以帮助您:@RohitJain“abc-def”呢?它给出了“abc”、“-”和“def”。如何获得“abc”、“-”和“def”?您不能手动添加连字符吗?另外,如果假设您有“abc xyz”,那么您希望使用类似于“abc-”的abc连字号,或者使用类似于-xyz的xyz连字号,您不会说您希望在哪里使用连字号。作为一个单独的元素或附加到一个单词?我想要像“abc”-“xyz”这样的输出也许这个解决方案可以帮助您:@RohitJain“abc-def”呢?它给出了“abc”、“-”和“def”。怎样才能得到“abc”、“-”和“def”?如果没有空字符?这不会分割空格分隔的单词,是吗?@Romczyk。??“总有一个。”布里亚纳涅说。。它会的,但它会包括上一个和下一个单词中的空格。@BrianAgnew。。例如,对于
“abc-efg”
,它将给出:-
[abc,-,efg]
。注意
abc
efg
后面的空格。如果没有空字符,这不会分割空格分隔的单词,是吗?@Romczyk。??“总有一个。”布里亚纳涅说。。它会的,但它会包括上一个和下一个单词中的空格。@BrianAgnew。。例如,对于
“abc-efg”
,它将给出:-
[abc,-,efg]
。注意
abc
efg
后面的空格。