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

Java中的特殊字符。你能在这个printf方法调用中使用单引号吗?

壤驷鸿祯
2023-03-14

我正在读一本关于Java的教科书,我遇到了这段话。我有一些问题。

首先,书中提到了一些特殊的转义字符。

’\n’ the newline character 
’\t’ the tab character
’\0’ the zero character
’\’’ the single-quote character 
’\"’ the double-quote character 
’\\’ the backslash character

到目前为止没问题。然后它写道:

换行符和制表符通常用于生成要打印的字符串。例如,你可以写

系统。出来println(“这是一个人:\t“name”\t“age”\n\n”)

但它写道:

在上面一行中使用“\t”而不是“\t”会更好更安全。如果你写了

System.out.println (age + ’\t’ + name);

年龄和制表符将被添加为int,这可能不是程序员想要的。写

System.out.println (age + "\t" + name);

将导致加号运算符的两种用法都解释为串联。

为什么标签字符周围的单引号用法不好?我不明白问题是什么或者为什么会发生?为什么Java解释器突然将“\t”解释为int?


共有3个答案

章哲彦
2023-03-14

当你使用System.out.println(这里有一个人:\t name\t age\n\n);它告诉你在上面的线。原因是"这是一个人:\t"是String类型,'\t'是字符类型。和opSerator'在String-and-String中工作得很好,但在String-and-字符中不工作。当您使用System.out.println(age'\t'name)时;''与int-and-int一起工作(如您所知,当您使用System.out.println(age"\t"name)时;'作为String-link运算符工作。

曾瀚昂
2023-03-14

问题不在于标签。问题在于周围的类型。

“\t”表示字符t,“\t”是长度为1的字符串。

他们指出的问题是周围类型。将整数添加到字符串会生成一个串联字符串。将整数添加到字符会生成一个整数。

孔皓
2023-03-14

根据其参数之一是否为字符串而不同。如果一个参数是字符串,则另一个参数将转换为字符串,并执行字符串连接。但是如果两个参数都不是字符串,那么两个参数都必须是数字,结果是算术加法char是数字类型('\t'的值为9)。

当多个操作数与串在一起时,就会出现混淆。考虑这一点,<代码> IT1和<代码> It2是整型变量:

"String" + int1 + '\t' + int2
int1 + " String" + '\t' + int2
int1 + '\t' + "String" + int2
int1 + '\t' + int2 + "String"

从左到右关联。在第一个表达式中,程序首先计算“String”int1,这意味着它将整数转换为字符串,结果是一个字符串(称之为temp1)。然后它计算temp1'\t',由于temp1是一个字符串,它将'\t'转换为一个字符串(一个制表符的字符串)并连接。结果是另一个字符串(称之为temp2),然后最后一个int2转换为字符串,并将temp2与其连接起来。

第二个表达式的工作原理类似,因为最左边的有一个字符串操作数。这意味着所有的将是字符串连接运算符。

不过,第三种表达方式有所不同。最左边的是添加两个整数(实际上是一个int和一个char),因此结果将是int19的结果,一个整数。然后,由于下一个具有字符串操作数,因此该整数(int1 9)将转换为字符串并串联。这将产生一个字符串,因此最后一个也是字符串串联,而int2将转换为字符串。

在最后一种情况下,第一个和第二个都是整数加法。这里的结果是计算出int1 int2 9;然后将结果转换为字符串并与字符串文字连接。

这就是我认为文本所指的。尽管第一个示例可以工作,但它很容易发生意外,因为如果您决定重做表达式并删除第一个字符串文字,所有运算符的含义将突然变为算术加法。

请注意,这仅适用于运算符。这是唯一具有这种特殊重载属性的运算符。

 类似资料:
  • 问题内容: 如何在Java / Eclipse中使用/显示♥,♦,♣或like等字符? 当我尝试直接使用它们时,例如在源代码中,Eclipse无法保存文件。 我能做什么? 编辑:如何找到Unicode转义序列? 问题答案: 问题在于,您使用的字符无法在文件设置为(Cp1252)的编码中表示。从我的角度来看,您基本上有两个选择: 选项1. 更改编码。 根据IBM的介绍,您应该将编码设置为UTF-8。

  • 我有一个网络服务,我想用“应用/x-www-表单-urlencoded”内容类型调用它。请求有时包含特殊字符,如*-和......问题是目标Web服务不能完美地接收请求。它接收类似这样的: "////////////////w=="几乎所有字符都转到/。到底是什么问题? 这是我的密码: web服务接收:

  • 问题内容: 在Java中,我试图拆分字符,但无法识别它。转义引发代码错误。 这是一个特殊字符还是我需要做其他事情才能使它识别出来? 问题答案: 该是Java正则表达式特殊字符-它的意思是“匹配的开始”的输入。 您将需要使用对其进行转义。需要使用双斜杠来转义,否则Java的编译器会认为您正在尝试在字符串中使用特殊序列,类似于换行符。 虽然不是特殊的转义序列,所以您会得到编译器错误。 简而言之,使用。

  • 问题内容: 我正在阅读文件,但我不知道如何阅读口音和特殊字符,这是我阅读的代码,我必须添加其他编纂,但我不知道该怎么做 谢谢 问题答案: 请尝试以下操作:

  • 问题内容: 我想删除的特殊字符,如多次出现,,,从我的java字符串由单下划线。我试过了 并且似乎用下划线替换了连续的相同类型的特殊字符,但否则不起作用。例如: 变成 (下划线有2个。)但是应该是。 同样对于失败的情况。我也尝试使用regex并做了一个正则表达式 但这仍然无济于事。我该如何实现? 问题答案: 注意,这是对与第一个捕获组匹配的 内容 的反向引用。要实际匹配字符类中的一个或多个任何字符

  • 问题内容: 我无法在Elasticsearch中以特殊字符结尾/开头的字符进行搜索。就像“ 123456!” 我的映射是 它给我错误,我可以在搜索查询(或映射)中做什么,以便特殊字符将被视为搜索字符串的一部分? 问题答案: 由于您的字段是(好!),请尝试用双引号引起来进行完全匹配: 这样做的另一种方法是在查询中设置分析器(但请务必转义,因为它是保留字符(对于操作员)