C#等效于Java的BreakIterator

时间:2017-05-29 13:46:31

标签: java c# breakiterator

我正在开发从java到c#的转换项目,是否有BreakIterator的c#等价物?我正在尝试IEnumerator,但在下面找不到iterator.SetText()用法,有人可以为下面的行提出等效的C#代码:

String finalResult=""
ArrayList<String> resultList = new ArrayList<String>();
BreakIterator iterator = BreakIterator.getSentenceInstance(currentLocale);
//int counter = 0;
iterator.setText(finalResult);
int lastIndex = iterator.first();
while (lastIndex != BreakIterator.DONE) 
{
int firstIndex = lastIndex;
lastIndex = iterator.next();
if (lastIndex != BreakIterator.DONE) 
{
    String sentence = finalResult.substring(firstIndex, lastIndex);
    resultList.add(sentence);
    System.out.println("sentence = " + sentence);
    //counter++;
}
}

1 个答案:

答案 0 :(得分:1)

BreakIterator是一种用于支持对Unicode文本的任意字符串进行语言环境感知的边界分析的机制。我怀疑Java类在很大程度上基于(也许甚至直接依赖于,但我正在推测)ICU(Unicode的国际组件)项目:http://site.icu-project.org/

引用ICU docs

文本边界分析是在格式化和处理文本时查找语言边界的过程。此过程的示例包括:

  1. 在显示或打印时,在自动换行文本的适当位置找到合适的点。
  2. 找到用户选择的单词的开头。
  3. 计算字符,单词,句子或段落。
  4. 确定用户按下箭头键时文本光标的移动距离(某些字符在文本存储区中需要多个位置,而文本存储区中的某些字符根本不显示)。
  5. 列出文档中唯一词的列表。
  6. 弄清楚给定范围的文本是否仅包含整个单词。
  7. 每个单词的首字母大写。
  8. 找到文本的特定单位(例如,找到文档中的第三个单词)。

ICU提供C语言绑定,恰当地命名为ICU4C。 ICU FAQ描述了ICU4C:

C和C ++语言以及许多操作系统环境不完全支持Unicode和符合标准的文本处理服务。即使某些平台确实提供了良好的Unicode文本处理服务,但可移植的应用程序代码无法使用它们。 ICU4C库填补了这一空白。 ICU4C为应用程序提供了开放,灵活,可移植的基础,可用于其软件全球化要求。 ICU4C密切跟踪行业标准,包括Unicode和CLDR(通用语言环境数据存储库)。

SIL International提供了C#语言绑定,使您可以通过名为icu-dotnet的项目在C#应用程序中使用ICU4C。

您可以在Github上找到官方的icu-dotnet存储库:
https://github.com/sillsdev/icu-dotnet

或者通过Nuget安装它:
https://www.nuget.org/packages/icu.net/