当前位置: 首页 > 编程笔记 >

java中关于转义字符的一个bug

堵琨
2023-03-14
本文向大家介绍java中关于转义字符的一个bug,包括了java中关于转义字符的一个bug的使用技巧和注意事项,需要的朋友参考一下

在java中,你可以定义

char c = '\u4f60';
char m = '\u0045';
char e = '\u554a';

这样的字面量,例如:

System.out.println("\u535a\u5ba2\u56ed");

这样的代码不管在什么编码环境下都不会出现中文乱码的问题

但是你不能定义这样的字面量:

char c = '\u000a';
char m = '\u0027';

这是因为\u000a和\u0027是特殊转义字符,Java对在字符串字面常量中的Unicode转义字符没有提供任何特殊处理。程序会直接按照原字符转换为它们所表示的字符[JLS 3.2]。

\u000a是一个LineFeed,即换行,这样程序会编译成

char c = '
';

自然是编译错误了

另一个例子是:

System.out.println("a\u0022.length()+\u0022b".length());   

对该程序的一种很肤浅的分析会认为它应该打印出26,稍微深入一点的分析会认为该程序应该打印16,如果你实际运行一遍,发现结果既不是26也不是16,而是2.

因为,\u0022是双引号的转义字,程序最终会编译为

String str = "a".length()+"b";
System.out.println(str.length()); 

基于此案例,我写了一个例子,大家可以运行尝试一下结果

String str = "\u0061\u0022\u002b\u0028\u006e\u0065\u0077\u0020\u006a\u0061\u0076\u0061\u002e\u0075\u0074\u0069\u006c\u002e\u0063\u006f\u006e\u0063\u0075\u0072\u0072\u0065\u006e\u0074\u002e\u0043\u0061\u006c\u006c\u0061\u0062\u006c\u0065<\u0056\u006f\u0069\u0064>\u0028\u0029\u007b\u0070\u0075\u0062\u006c\u0069\u0063\u0020\u0056\u006f\u0069\u0064\u0020\u0063\u0061\u006c\u006c\u0028\u0029\u007b\u0074\u0068\u0072\u006f\u0077\u0020\u006e\u0065\u0077\u0020\u0052\u0075\u006e\u0074\u0069\u006d\u0065\u0045\u0078\u0063\u0065\u0070\u0074\u0069\u006f\u006e\u0028\u0022\u0073\u0075\u0070\u0072\u0069\u0073\u0065\u0020\u006d\u0061\u0074\u0068\u0065\u0072\u0020\u0066\u0075\u0063\u006b\u0065\u0072\u0021\u0022\u0029\u003b\u007d\u007d\u0029\u002e\u0063\u0061\u006c\u006c\u0028\u0029\u002b\u0022";
System.out.println(str);

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持小牛知识库!

 类似资料:
  • 本文向大家介绍Java转义字符,包括了Java转义字符的使用技巧和注意事项,需要的朋友参考一下 示例 通常 要使用正则表达式中的特定字符(?+|等),按其字面意思,必须对其进行转义。在常规正则表达式中,这是通过反斜杠完成的\。但是,由于它在Java字符串中具有特殊含义,因此必须使用双反斜杠\\。 这两个示例不起作用: 这个例子有效 分割管道分隔字串 这不会返回预期的结果: 这将返回预期结果: 转义

  • 问题内容: 为了回答这个问题,我设法通过转义反斜杠来使字符串成为转义字符。 当我尝试将其概括为转义所有转义的字符时,它似乎无能为力: 但是对于特定的转义字符使用相同的方法,它确实起作用: 有一般的方法可以做到这一点吗?应包括,,,等。 问题答案: 使用r’text’将字符串定义为raw,如下面的代码所示:

  • 问题内容: 我正在使用git,然后将提交消息和其他位作为JSON有效负载发布到服务器。 目前我有: 将MSG设置为: 然后 我的真实JSON还有另外两个字段。 这很好用,但是当然当我有一个提交消息(例如上面带有撇号的提交消息)时,JSON是无效的。 如何转义bash中所需的字符?我不熟悉该语言,所以不确定从哪里开始。更换有会做的最小,我怀疑这份工作。 问题答案: 好,知道该怎么办。Bash像预期的

  • 如下考虑Java类,其中是的字段,而是类中方法的局部变量。 声称:

  • 问题内容: 我有以下要发送到NodeJS服务器的JSON字符串: 当字符串包含字符和 在NodeJS服务器上,我正在像这样解析JSON: 有什么想法我可以设法毫无问题地发送所有字符吗? 问题答案: 我会使用一个库来为您创建JSON 。一些选项是: GSON 克罗福德的解放 这将使转义变得更加容易。一个示例(使用)为:

  • Lucene支持转义查询语法中的特殊字符。当前列表中的特殊字符是 要转义这些字符,请使用字符之前的\。例如搜索(1 1): 2使用查询: 我的问题是如何一气呵成地逃离整个字符串?例如如何获得转义字符串。