小编Joa*_*eiß的帖子

编程错误导致无法解释的正则表达式

对于我错误地创建了正则表达式的测试:

|(\\w+)|
Run Code Online (Sandbox Code Playgroud)

我很困惑,这个正则表达式确实有效,我无法解释结果:

 public static void main(String[] args) {
    String toReplace="Hey I'm a lovely String an I'm giving my |value| worth!";
 // String replacement1="2 cent"; // I planned to replace |value| with 2 cent
   String replacement1="@"; // to produce a better Output
   String regex="|(\\w+)|"; // I forgot to escape the | 
    replacement1="@";
    result=toReplace.replaceAll(regex,replacement1);
    System.out.println(result);
}
Run Code Online (Sandbox Code Playgroud)

结果是:

@H@e@y@ @I@'@m@ @a@ @l@o@v@e@l@y@ @S@t@r@i@n@g@ @a@n@ @I@'@m@ @g@i@v@i@n@g@ @m@y@ @|@v@a@l@u@e@|@ @w@o@r@t@h@!@
Run Code Online (Sandbox Code Playgroud)

到目前为止我的想法是java试图替换字符之间的"无",但为什么不是字符本身呢?

\\w+ 应该匹配 'H'

我希望每个字符都被3个符号替换或仅由1个替换,但字符不会被替换为难题.

java regex

8
推荐指数
1
解决办法
69
查看次数

Java三元与大对象相比

三元运算符通常只是一个哲学讨论的主题:是否

a=b>5?1:0;
Run Code Online (Sandbox Code Playgroud)

更可读,更快,更酷

if(b>5) { a=1; } else {a=0;}
Run Code Online (Sandbox Code Playgroud)

(带或不带花括号)我通常不在乎.我喜欢我的三元运算符.但我们讨论了这段代码:

BigObject myBigObject=null;
...
do {
   myBigObject=
     myBigObject==null?
     createBigObject():
     myBigObject;
...
} while(manyIteration);
Run Code Online (Sandbox Code Playgroud)

同事声称这个构造将创建myBigObject将被复制每个循环(除了第一个),这将浪费宝贵的时间和内存,并且他发现了三元运算符无用的情况.唯一的方法是:

do {
     if(myBigObject==null)
       myBigObject=createBigObject();
...
} while(manyIteration);
Run Code Online (Sandbox Code Playgroud)

我认为聪明的编译器会看到对象被分配给自己并将其优化出来.

但谁是对的?

java

3
推荐指数
1
解决办法
115
查看次数

标签 统计

java ×2

regex ×1