Java删除变音符号

特里博伊

我正在尝试制作将消除变音符号的功能(不要故意使用Normalizer)。功能看起来像

private static String normalizeCharacter(Character curr) {
    String sdiac = "áäčďéěíĺľňóôőöŕšťúůűüýřžÁÄČĎÉĚÍĹĽŇÓÔŐÖŔŠŤÚŮŰÜÝŘŽ";
    String bdiac = "aacdeeillnoooorstuuuuyrzAACDEEILLNOOOORSTUUUUYRZ";
    char[] s = sdiac.toCharArray();
    char[] b = bdiac.toCharArray();
    String ret;
    for(int i = 0; i < sdiac.length(); i++){
        if(curr == s[i])
            curr = b[i];
    }
    ret = curr.toString().toLowerCase();
    ret = ret.replace("\n", "").replace("\r","");
    return ret;
}

像这样调用funcion(文件中的每个字符都发送到此函数)

private static String readFile(String fName) {

    File f = new File(fName);
    StringBuilder sb = new StringBuilder();

    try{

        FileInputStream fStream = new FileInputStream(f);
        Character curr;
        while(fStream.available() > 0){
            curr = (char) fStream.read();
            sb.append(normalizeCharacter(curr));
            System.out.print(normalizeCharacter(curr));
        }
    }catch(IOException e){
        e.printStackTrace();
    }
    return sb.toString();
}

文件text.txt包含以下内容:ľščťžýáíéúäôň我希望lcstzyaieuaon从程序中返回,但要插入预期的字符串,我得到了这个¾è yaieuaoò我知道问题出在编码中,但是不知道在哪里。有任何想法吗 ?

怀疑论者

您正在尝试将字节转换为字符。

但是,字符ľ不能表示为单个字节。它的unicode表示形式是U + 013E,而它的UTF-8表示形式是C4 BE。因此,它由两个字节表示。其他字符也是如此。

假设文件的编码为UTF-8。然后读取字节值C4,然后将其转换为char这将为您提供字符U + 00C4(Ä),而不是U + 013E。然后,您阅读BE,并将其转换为字符U + 00BE(¾)。

因此,请勿混淆字节和字符。而不是InputStream直接使用Direct,应将其包装为ReaderAReader能够根据其创建的编码读取字符:

BufferedReader reader = new BufferedReader(
                            new InputStreamReader(
                                new FileInputStream(f), StandardCharsets.UTF_8
                            )
                        );

现在,您将能够读取字符甚至整个行,并且编码将直接完成。

int readVal;
while ( ( readVal = reader.read() ) != -1 ) {
    curr = (char)readVal;
    // ... the rest of your code
}

请记住,int如果要不read()带参数使用,您仍在阅读

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Python:删除希腊变音符号/重音符号

来自分类Dev

使用Go删除变音符号

来自分类Dev

删除变音符号不起作用

来自分类Dev

如何从字符串中删除变音符号(变音符)?

来自分类Dev

在索引时间将变音符号删除到Solr中

来自分类Dev

通过XSLT删除整个XML文档中的变音符号

来自分类Dev

从python中的文本中仅删除特定的变音符号

来自分类Dev

在索引时间将变音符号删除到Solr中

来自分类Dev

为什么preg_replace删除变音符号?

来自分类Dev

如何从字符串中删除变音符号(重音符号)?

来自分类Dev

当Java URI包含变音符号时,解析它的主机

来自分类Dev

RedirectToAction()打破变音符号

来自分类Dev

不能写变音符号

来自分类常见问题

带有重音符号的文件夹中的Java安装(变音符号)

来自分类Dev

删除所有非字母数字字符,但保留变音符号(重音符号)和-(破折号)

来自分类Dev

为什么有些变音符号不被删除?

来自分类常见问题

如何在Swift中从字符串中删除变音符号?

来自分类Dev

strtr行为怪异-从字符串中删除变音符号

来自分类Dev

Ruby从文件名中删除变音符号-如何保留它们?

来自分类Dev

为什么有些变音符号不被删除?

来自分类Dev

仅从 SQL Server 中的一列中删除变音符号

来自分类Dev

Qt SQL Server和变音符号

来自分类Dev

无法显示德语变音符号

来自分类Dev

编码变音符号的怪异问题

来自分类Dev

无法验证包含变音符号的文本

来自分类Dev

变音符号上的Levenshtein距离

来自分类Dev

在列表/集中存储变音符号

来自分类Dev

AngularJs搜索并忽略变音符号

来自分类Dev

从iOS到PHP的变音符号