CTimet 2021-10-09 20: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 21: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月18日
  • 已采纳回答 10月10日
  • 创建了问题 10月9日

悬赏问题

  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler