Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java string.replace()函数是如何工作的?_Java - Fatal编程技术网

Java string.replace()函数是如何工作的?

Java string.replace()函数是如何工作的?,java,Java,这似乎是个奇怪的问题,但string.replace()在二进制中是如何工作的 很抱歉提这么短的问题 编辑: 所以我想我没有说清楚 如何搜索类变量字符串的二进制文件。我对源代码一无所知,所以 替换方法有两种工作方式:一种是用另一个“字符串”替换“字符串”,另一种是用指定的字符替换字符串中的字符 在用另一个“字符串”替换一个“字符串”序列时,Java虚拟机必须加载另一个类(Matcher类)。另一个类依次将目标字符串转换为没有非终端正则表达式符号的字符串。然后,另一个类将搜索转换后的字符串,以查找

这似乎是个奇怪的问题,但string.replace()在二进制中是如何工作的

很抱歉提这么短的问题

编辑:

所以我想我没有说清楚


如何搜索类变量字符串的二进制文件。我对源代码一无所知,所以

替换方法有两种工作方式:一种是用另一个“字符串”替换“字符串”,另一种是用指定的字符替换字符串中的字符

在用另一个“字符串”替换一个“字符串”序列时,Java虚拟机必须加载另一个类(Matcher类)。另一个类依次将目标字符串转换为没有非终端正则表达式符号的字符串。然后,另一个类将搜索转换后的字符串,以查找与旧字符序列匹配的字符序列。这些字符序列使用另一个类StringBuffer逐个追加,但这次替换的字符序列被编码到缓冲区内存中,而不是“旧字符串”序列。来自Matcher类的控件将返回到String类。因为我们在这里讨论的是另一个类,所以我不会对这部分进行太多的阐述

在用指定字符替换字符串中的字符时,Java虚拟机的控制权保留在string类的“二进制”指令中。首先,检查是否确实会发生替换。检查新字符和旧字符的相等性以及目标字符的存在性。一旦这些“测试”通过,就会创建一个Unicode字符序列作为目标字符串值的副本。遍历该字符序列,然后用“新”字符的位序列逐个填充每个“旧”字符的位置。一旦实际填充完成,将根据所述字符序列创建一个新的字符串类型类。返回结果字符串


当然,这个答案还可以进一步阐述。我希望peeps也能帮我解答问题。

你说的二进制是什么意思?另外,源代码是免费提供的。我现在下班回家了。这个问题不那么痛苦,只要手里拿着一杯啤酒就可以了。想详细说明一下吗?布莱恩干杯,伙计!如果使用的是二进制数据,则应使用
字节[]
,而不是
字符串
<代码>字符串由两个字节字符组成,不允许某些二进制值不是有效的unicode。这个答案毫无意义。“将目标字符串转换为没有正则表达式的内容”?这是什么意思?@user2357112我的意思是没有非终端正则表达式符号。我已经编辑了答案。谢谢,我没有注意到第一次替换的答案就停在那里了。
replace
不使用正则表达式。它替换文字字符序列。是的,replace不使用正则表达式。因此,当您输入一个“(”时,它应该被替换。对字符串内部Matcher的调用会处理这些符号。哦,它用文字标志委托给正则表达式引擎,而不是有自己的专用替换代码。我以前不知道这个标志。