我正在开发从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++;
}
}
答案 0 :(得分:1)
BreakIterator
是一种用于支持对Unicode文本的任意字符串进行语言环境感知的边界分析的机制。我怀疑Java类在很大程度上基于(也许甚至直接依赖于,但我正在推测)ICU(Unicode的国际组件)项目:http://site.icu-project.org/
引用ICU docs:
文本边界分析是在格式化和处理文本时查找语言边界的过程。此过程的示例包括:
- 在显示或打印时,在自动换行文本的适当位置找到合适的点。
- 找到用户选择的单词的开头。
- 计算字符,单词,句子或段落。
- 确定用户按下箭头键时文本光标的移动距离(某些字符在文本存储区中需要多个位置,而文本存储区中的某些字符根本不显示)。
- 列出文档中唯一词的列表。
- 弄清楚给定范围的文本是否仅包含整个单词。
- 每个单词的首字母大写。
- 找到文本的特定单位(例如,找到文档中的第三个单词)。
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/