【问题标题】:Split a string into unicode words? (particularly Vietnamese)将字符串拆分为 unicode 单词? (尤其是越南语)
【发布时间】:2017-06-16 17:21:59
【问题描述】:

我一直在尝试将包含越南语文本的字符串拆分为单个单词。例如:

s = "Chào bạn, mình tên Đạt."

会被拆分成一个数组:

arr = {"Chào", "bạn", "mình", "tên", "Đạt"}

通常用英文,这只需 1 行即可轻松解决:

arr = s.split("\\W+");

但是由于越南语中有很多非字母的字母,仅靠一行是无法解决的。所以问题是:是否有任何正则表达式可以替换这个“\W+”(我对正则表达式不是很好)?如果没有,有没有其他方法可以解决?

【问题讨论】:

  • "\\s"分割whitespaces怎么样?根据需要加上标点符号。
  • 这将导致 {"Chào", "bạn,", "mình", "tên", "Đạt."} 包含标点符号

标签: java string split


【解决方案1】:

按空格和标点符号分割字符串。您可以添加标点符号。由于正则表达式中的某些字符是保留的,我更喜欢在字符类[] 中使用它们。

arr = s.split("([ ]|[.]|[,]|[:]|[?])+"); //You can customize punctuation.

这是一个工作示例。

public static void main(String[] args) {
   String  inputStr = "Chào bạn, mình tên Đạt.";
   String [] splitArray = inputStr.split("([ ]|[.]|[,]|[:]|[?])+");
   for (String s : splitArray) {
       System.out.println(s);
   }
}

打印:

Chào
bạn
mình
tên
Đạt

更新

如果是简单的空格字符[ ],它工作得很好。但是,对于这个字符串。

 String  inputStr = "Chào  bạn,\n mình tên\t Đạt.";

结果

Chào
bạn


mình
tên 
Đạt

要修复它,请使用空格字符类 - \s

  String [] splitArray = inputStr.split("(\\s|[.]|[,]|[:]|[?])+");

或者循环遍历字符串数组,然后修剪它们。

【讨论】:

  • 我很欣赏您的回答,并且之前已经考虑过了。但我的字符串不只包含. , : ? 作为标点符号。但是如果我找不到其他方法,我肯定会使用这个解决方案。
  • 然后更新正则表达式。找出您需要的标点符号,然后将它们添加到正则表达式中。
猜你喜欢
  • 2011-06-12
  • 2014-06-09
  • 1970-01-01
  • 2022-01-18
  • 2011-10-23
  • 2011-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多