当前位置: 首页 > 知识库问答 >
问题:

获取不正确的字符串。java中的length()

申屠健
2023-03-14

我试着打印出这个字符串长度,

public class Main {
    public static void main(String[] args) {
        
        String test = "JAMES LEVIN NOORZAI alias JOHN ABDUL BILAR alias JAKE ‘DON AL-BASIR alias HAJI BASIR ANTHONY alias A";
        System.out.println(test.length());
    }
}

但是它显示100是不正确的。应该是102。我已经在记事本上检查了两次,它显示102。我不知道我错过了什么。

共有1个答案

蔺沛
2023-03-14

原因与编码有关。

Java字符串是由UTF-16编码的16字节字符组成的序列。如果打印出字符:

    for (int i = 0; i < test.length(); i++) {
        char c = test.charAt(i);
        System.out.println(i + " " + c + " " + (int)c);
    }

它给出:

...
53   32
54 ‘ 8216
55 D 68
...

因此,这句话只适用于一个Java字符。

但在记事本中,您可能正在使用UTF-8。如果转换为UTF-8并按如下方式打印:

    byte[] bytes = test.getBytes(Charset.forName("UTF-8"));
    for (int i = 0; i < bytes.length; i++) {
        int v = (bytes[i] & 0xFF);
        System.out.println(i + " " + v);
    }

你会发现:

...
53 32
54 226
55 128
56 152
57 68
...

所以在UTF-8中,引号是三个字节。实际上,记事本应该通过告诉你列和位置来告诉你。

 类似资料:
  • 我试着打印出这个字符串长度, 但它显示100,这是不正确的。应该是102。我已经在记事本上重新登记了,它显示102。我不知道我错过了什么。

  • 我试图上传csv到我的mysql数据库使用jooq,但我得到以下错误。我在网上尝试了各种建议的解决方案,但都没能解决 我如何将csv上传到jooq 我确保文件在utf-8中,但是当有UTF-8字符记录时,无法保存在DB中并抛出上述错误。我确保使用 前端ajax: 我正在通过java rest从前端读取文件 并在传递给jooq之前在本地系统中递归写入文件 我将DB设置为接受utf-8,并进行了验证

  • 问题内容: 我试图读取一个流,并希望为每个字符串获取准确的位置(坐标) 我实际上有这样的职位 但是我不知道哪个字符串适合哪个位置。另一方面,在Itext中,我只能使用 但当然根本没有任何位置。 那么,如何获取每个文本(字符串,字符,…)的确切位置? 问题答案: 正如plinth和David van Driessche在他们的答案中已经指出的那样,从PDF文件中提取文本并非易事。幸运的是,iText

  • 我是Java的新手,我正在尝试从一个多行的输入中获取一个字符串。 例如,一个字符串=“the quick brown fox jumps over the lazy dog.the quick brown fox jumps over the lazy dog.the quick fox jumps over the lazy dog.”输入如下: 敏捷的棕色狐狸跳过懒惰的狗。 敏捷的棕色狐狸跳过

  • 问题内容: 在Java中,我这样做是为了修剪字符串: 输出为: 作品。但是我想知道是否通过给自己分配一个变量来做正确的事情。我不想通过创建另一个变量并将调整后的值分配给它来浪费资源。我想就地进行修剪。 那我这样做对吗? 问题答案: 您做对了。从文档中: 字符串是常量;它们的值创建后无法更改。字符串缓冲区支持可变字符串。由于String对象是不可变的,因此可以共享它们。 同样从文档中: 修剪 公共字

  • 我是C#的新手,我有一些Java方面的基础知识,但我不能让这段代码正常运行。 它只是一个基本的计算器,但当我运行程序时,VS2008给了我这个错误: 我做了几乎相同的程序,但在Java使用的是JSwing,它运行得非常好。 下面是C#的形式: 会有什么问题?有没有办法解决? PS:我也试过 但没有奏效。