4

我正在研究从 java 到 c# 的转换项目,是否有任何 c# 等价物BreakIterator?我正在尝试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++;
}
}
4

1 回答 1

1

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

引用ICU 文档

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

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

ICU 提供 C 语言绑定,恰当地命名为 ICU4C。ICU 常见问题解答描述了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/

于 2020-03-12T23:25:34.043 回答