CTimet 2021-10-09 12:25 采纳率: 84%
浏览 29
已结题

这段代码如何理解?能解释一下吗

不废话,直接上代码:

//int i = 3;这一句是我加上的
String greeting = "Hello";
int index = greeting.offsetByCodePoints(0, i);
System.out.println(index);
int cp = greeting.codePointAt(index);
System.out.println(cp);
//得到第i个码点

今天在JAVA书里发现了这样一个代码段。主要是不理解码点啥意思。以及结果如何得到的。为了更加深入的分析代码,我尝试定义了i 为3,但实际上原本书上的代码是没有这一段定义的,书上只是说这段代码用来得到第i个码点。但是我不理解他咋得到的。过程是什么。我尝试定义了i并运行了程序。程序返回的值是108,那我就更不理解了,是如何得到cp的值为108的?我又尝试将i的值修改为了2,结果是一样的,i=2时cp的值仍然为108,这个时候我就更迷茫了,实在理解不了为什么所以发了这个问题,希望有人能够解答我的疑惑,以及详细介绍代码是如何工作的以及为什么cp的值不管i是3还是2,cp仍然等于108.希望回答者能够讲解详细,越详细容易理解更容易得到采纳,谢谢!

  • 写回答

1条回答 默认 最新

  • 安自李 2021-10-09 13:11
    关注
    
    不明白是因为你没有把类String下的这两个方法搞清楚:
    1.public int offsetByCodePoints​(int index,int codePointOffset)
    index - 要偏移的索引,codePointOffset - 代码点的偏移量
    返回该String内的索引,该索引与给定的index由codePointOffset代码点偏移。
    2.public int codePointAt​(int index)
    返回指定索引处的字符(Unicode代码点)
    重点是返回指定索引处的字符是Unicode编码,什么是Unicode你可以自己去了解下,奇妙的是你两次把i的值设为23,
    而恰恰字符"hello"中两个l的索引分别是23;l对应的Unicode值就是108,所以你两次得到的cp值就是108,你把i的值改成0,1,5试试。
    提示:最后cp的输出进行强转为(char)类型你就明白了
    

    i=3:

    img

    i=1:

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 10月17日
  • 已采纳回答 10月10日
  • 创建了问题 10月9日

悬赏问题

  • ¥15 DBIF_REPO_SQL_ERROR
  • ¥15 根据历年月数据,用Stata预测未来六个月汇率
  • ¥15 DevEco studio开发工具 真机联调找不到手机设备
  • ¥15 请教前后端分离的问题
  • ¥100 冷钱包突然失效,急寻解决方案
  • ¥15 下载honeyd时报错 configure: error: you need to instal a more recent version of libdnet
  • ¥15 距离软磁铁一定距离的磁感应强度大小怎么求
  • ¥15 霍尔传感器hmc5883l的xyz轴输出和该点的磁感应强度大小的关系是什么
  • ¥15 vscode开发micropython,import模块出现异常
  • ¥20 Excel数据自动录入表单并提交