2013-02-21 54 views
1

如何将当前Pattern中未存储在变量猜测中的所有内容替换为“ - ”?猜测会随着不同的方法调用而改变。我想用一个“ - ”替换不是字符猜测的东西(在这种情况下=>'e')。如何使用模式内的变量来替换除了?

String word = "ally"; 
char guess = 'e'; 
String currentPattern = word.replaceAll("[^guess]", "-"); 

很明显,这是行不通的。

+3

这是一个Java问题。与正则表达式无关:) – 2013-02-21 07:54:27

+0

对不起,我是新来的:) – austindg 2013-02-21 07:58:28

+0

你必须像jlordo说的那样将猜测作为一个变量加入。无论如何,我有一段时间后有类似的问题:http://stackoverflow.com/questions/14932510/how-to-select-one-or-more-characters-that-is-not-intersect-with-a-particular- wor – namalfernandolk 2013-02-21 08:10:11

回答

4

你几乎拥有它。使用字符串连接:

String currentPattern = word.replaceAll("[^" + guess + "]", "-"); 

,如果你不具备内guess正则表达式元字符,这就需要进行字符类中逃脱这种方法才有效。否则会抛出一个PatternSyntaxException

question表明你的情况,你只添加char到你的角色分类,PatternSyntaxException甚至不会,如果你不逃避任何事情发生。

+0

但是,当字符互换时,这会替换单词吗?我的意思是,如果这个词=“abcdfeghijklmnop”和输出将相同的时候guess =“ghij”和guess =“jihg”。 – namalfernandolk 2013-02-21 08:01:40

+2

@NamalFernando:'guess'是一个'char',所以它总是只有一个字符。 – jlordo 2013-02-21 08:02:33

+0

哎呀!错过了。我的错! :) – namalfernandolk 2013-02-21 08:05:02

0

你几乎在那里,只需使用+串联运算符连接猜测和正则表达式部分。

  String word = "ally"; 
     char guess = 'e'; 
     String currentPattern = word.replaceAll("[^"+guess+"]", "-"); 
     System.out.println(currentPattern); 
0

你需要明确包括正则表达式的字符串变量:

String word = "alely"; 
char guess = 'e'; 
System.out.println(word.replaceAll(String.format("[^%s]", guess), "-")); 
0

把它变成一个方法是什么?

public String replaceAllExcept(String input, char pattern) { 
    return input.replaceAll("[^" + pattern + "]", "-"); 
} 

System.out.println(replaceAllExcept("ally", 'e'); 
System.out.println(replaceAllExcept("tree", 'e');