编译原理中的正则表达式与正规表达式有什么区别?
首先,正则表达式不仅在Java里有,其它语言里面也有,它是一个数学上的概念,各个语言中的正则表达式是它的不同形式的实现。
其次,编译原理的词法分析里,会用到正则表达式去匹配源程序中的各种token(记号),比如说int a = 8;里识别出:类型名:int变量名:a运算符:=数字:8结尾分号:;总之,二者有联系,但不是一回事。
java中“\s”什么意思?
\S不是java的 是正则表达式的\d 数字:[0-9] \D 非数字: [^0-9] \s 空白字符:[ \t\n\x0B\f\r] \S 非空白字符:[^\s] \w 单词字符:[a-zA-Z_0-9] \W 非单词字符:[^\w] String pattern() 返回在其中编译过此模式的正则表达式。 要是非得纠结两个\ 那就是说 第一个\是java的转义字符 第二个是正则匹配转义字符
请问split("\\.")是什么意思?(JAVA代码)?
split(参数)的参数是个正则表达式的字符串。首先Java中的“\”的后面只能带下面几个字符,也就是“\b\t\n\f\r\"\'\\”,所以“\.”就不在里面,就会报错了啊。“\\.”的意思就是“\\”首先转成“\”然后再在“\”字符的后面加一个“.”这样就组成了“\.”这个字符串,这个字符串就符合java中正则表达式的语法,然后给你解析了。
js正则(以顿号分割,但是不包含括号内的顿号的正则表达式)?
用java写了个,如果用别的语言的话自己替换,记得js的全局匹配貌似在后面得加一个g正则表达式就是"[^,]*" public static void main(String[] args) { Pattern p = Pattern.compile("[^,]*"); Matcher m = p.matcher("aBC,English,Accout.Name123_abc,com.hot.sgp.afdsf "); while(m.find()){ System.err.print(m.group()+"\t"); } }
编写Java代码如何更加规范和简洁?
这个问题包含两点:
- 代码如何更加规范;
- 代码如何更整洁;
下面按照这两点展开说说我的理解。
代码规范
代码规范其实业界大厂或者别的语言已经有很多解决方案了,比如,pylint,clang-format,go-fmt这种,对于JAVA可以试试看Google的google-java-format,我目前是gradle流,喜欢maven的朋友不妨自己去官网上看一下用法。
引入的方法很简单:
直接在plugins里声明一下。
检查的话可以敲命令:gradle verifyGoogleJavaFormat
按照Google模板改写文件:gradle googleJavaFormat
当然最好在Makefile里写好,一劳永逸。
这个格式也支持IDEA和eclipse,以IDEA为例:
- 在插件的Marketplace里搜google-java-format,然后安装。
- IntellJ IDEA -> Other Settings -> google-java-format 勾选Enable
- 默认项目应用的话,在Files -> Other Settings -> Default Settings里启用
应用完成后Ctrl+Alt+L就能格式化代码了。不过这里有个坑,它不会格式化import代码段,这个可以去github上下载个格式导入IDEA解决。
这样几步下来基本就能保证团队内部的代码风格一致。
代码整洁
代码整洁比较考验基本功,最好的办法是去看看Effective Java,按Joshua Bloch大神的要求做。
这个话题三言两语说不清,加油吧。

