C#中对应Java的BreakIterator的方法是什么?

4

我正在从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++;
}
}

你可能可以找到一个正则表达式;我完全看不出与IEnumerator之间的联系。 - TaW
@TaW,您能详细说明在这种情况下如何使用正则表达式吗? - Pratik J
不,这只是一个猜测;我不会Java,但似乎你想解析文本,对吗? - TaW
@TaW BreakIterator解决的问题比正则表达式提供的简单模式匹配机制复杂得多。有关详细信息,请参见我下面的答案。 - Dan Bechard
@Jenix 我想知道你是否解决了这个问题? - Dan Bechard
1
@DanBechard 在C#中没有内置的方法。我可以建议以下几点:1)使用icu-dotnet。2)如果您在Android上使用Unity,则自己创建BreakIterator包装器。3)尽力使用StringInfo和TextElementEnumerator。 - Jenix
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 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/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接