打字猴:1.70044287e+09
1700442870
1700442871 每项的输出都是准确的,而且程序也不复杂,先生成一个正则表达式对象,然后使用匹配器进行匹配,之后通过一个while循环统计匹配的数量。需要说明的是,在Java的正则表达式中“\b”表示的是一个单词的边界,它是一个位置界定符,一边为字符或数字,另外一边则非字符或数字,例如“A”这样一个输入就有两个边界,即单词“A”的左右位置,这也就说明了为什么要加上“\w”(它表示的是字符或数字)。
1700442872
1700442873 正则表达式在字符串的查找、替换、剪切、复制、删除等方面有着非凡的作用,特别是面对大量的文本字符需要处理(如需要读取大量的LOG日志)时,使用正则表达式可以大幅地提高开发效率和系统性能,但是正则表达式是一个恶魔(Regular Expressions is evil),它会使程序难以读懂,想想看,写一个包含^、$、\A、\s、\Q、+、?、()、[]、{}等符号的正则表达式,然后告诉你这是一个“这样,这样……”的字符串查找,你是不是要崩溃了?这代码只有上帝才能看懂了!
1700442874
1700442875 注意 正则表达式是恶魔,威力巨大,但难以控制。
1700442876
1700442877
1700442878
1700442879
1700442880 编写高质量代码:改善Java程序的151个建议 [:1700438128]
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,那么输出的结果也就是乱码了。我们再详细分解一下运行步骤:
1700442910
1700442911 步骤1 创建Client.java文件。
1700442912
1700442913 该文件的默认编码GBK(如果使用Eclipse,则可以在属性查看到)。
1700442914
1700442915 步骤2 编写代码(如上)。
1700442916
1700442917 步骤3 保存,并使用javac编译。
1700442918
1700442919 注意我们没有使用“javac-encoding GBK Client.java”显式声明Java的编码格式,javac会自动按照操作系统的编码(GBK)读取Client.java文件,然后将其编译成.class文件。
[ 上一页 ]  [ :1.70044287e+09 ]  [ 下一页 ]