1700442860
1700442861
Today is Monday单词数:3
1700442862
1700442863
Today is Monday?No!
1700442864
1700442865
Today is Monday?No!单词数:4
1700442866
1700442867
I’m Ok.
1700442868
1700442869
I’m Ok.单词数:3
1700442870
1700442871
每项的输出都是准确的,而且程序也不复杂,先生成一个正则表达式对象,然后使用匹配器进行匹配,之后通过一个while循环统计匹配的数量。需要说明的是,在Java的正则表达式中“\b”表示的是一个单词的边界,它是一个位置界定符,一边为字符或数字,另外一边则非字符或数字,例如“A”这样一个输入就有两个边界,即单词“A”的左右位置,这也就说明了为什么要加上“\w”(它表示的是字符或数字)。
1700442872
1700442873
正则表达式在字符串的查找、替换、剪切、复制、删除等方面有着非凡的作用,特别是面对大量的文本字符需要处理(如需要读取大量的LOG日志)时,使用正则表达式可以大幅地提高开发效率和系统性能,但是正则表达式是一个恶魔(Regular Expressions is evil),它会使程序难以读懂,想想看,写一个包含^、$、\A、\s、\Q、+、?、()、[]、{}等符号的正则表达式,然后告诉你这是一个“这样,这样……”的字符串查找,你是不是要崩溃了?这代码只有上帝才能看懂了!
1700442874
1700442875
注意 正则表达式是恶魔,威力巨大,但难以控制。
1700442876
1700442877
1700442878
1700442879
1700442881
编写高质量代码:改善Java程序的151个建议 建议58:强烈建议使用UTF编码
1700442882
1700442883
Java的乱码问题由来已久,有点经验的开发人员肯定都遇到过乱码问题,有时是从Web上接收的乱码,有时是从数据库中读取的乱码,有时是在外部接口中接收到的乱码文件,这些都让我们困惑不已,甚至是痛苦不堪,看如下代码:
1700442884
1700442885
public static void main(String[]args)throws Exception{
1700442886
1700442887
String str=“汉字”;
1700442888
1700442889
//读取字节
1700442890
1700442891
byte[]b=str.getBytes(“UTF-8”);
1700442892
1700442893
//重新生成一个新的字符串
1700442894
1700442895
System.out.println(new String(b));
1700442896
1700442897
}
1700442898
1700442899
Java文件是通过IDE工具默认创建的,编码格式是GBK,大家想想看上面的输出结果会是什么?可能是乱码吧?两个编码格式不相同。我们暂不公布结果,先解释一下Java中的编码规则。Java程序涉及的编码包括两部分:
1700442900
1700442901
(1)Java文件编码
1700442902
1700442903
如果我们使用记事本创建一个.java后缀的文件,则文件的编码格式就是操作系统默认的格式。如果是使用IDE工具创建的,如Eclipse,则依赖于IDE的设置,Eclipse默认是操作系统编码(Windows一般为GBK)。
1700442904
1700442905
(2)Class文件编码
1700442906
1700442907
通过javac命令生成的后缀名为.class的文件是UTF-8编码的UNICODE文件,这在任何操作系统上都是一样的,只要是class文件就会是UNICODE格式。需要说明的是,UTF是UNICODE的存储和传输格式,它是为了解决UNICODE的高位占用冗余空间而产生的,使用UTF编码就标志着字符集使用的是UNICODE。
1700442908
1700442909
再回到我们的例子上,getBytes方法会根据指定的字符集提取出字节数组(这里按照UNICODE格式来提取),然后程序又通过newString(byte[]bytes)重新生成一个字符串。来看看String这个构造函数:通过操作系统默认的字符集解码指定的byte数组,构造一个新的String。结果已经很清楚了,如果操作系统是UTF-8编码的话,输出就是正确的,如果不是,则会是乱码。由于这里使用的是默认编码GBK,那么输出的结果也就是乱码了。我们再详细分解一下运行步骤:
[
上一页 ]
[ :1.70044286e+09 ]
[
下一页 ]