java - 替换/审查

标签 java replace

我正在开发一个名为 Quiz 的系统...

最后剩下的就是“线索”。目前我有

   <id value="100"> 
      <question value="Who said E=mc2"/> 
      <answear value="Einstein"/> 
      <clue1 value="E*******"/> 
      <clue2 value="E******n"/> 
      <clue3 value="Ei****in"/> 
   </id> 

我想从 xml 中删除线索,因为很难手动完成它们...... 所以我做了一些事情,但失败了

public class Test 
{
    public static void main(String[] argv) throws Exception 
    {
        System.out.println(replaceSubString("Einstein", "*", 3));
    }

    static String[] letters = {"e","i"};

    public static String replaceSubString(final String str, final String newToken, int max) 
    {
        if ((str == null) || (newToken == null)) 
        return str;

        StringBuffer buf = new StringBuffer(str.length());
        int start = 0, end = 0;

        for(int i = 0; i < letters.length; i++)
        {
            if(Rnd.get(100) > 50) //50% to add the symbol
            {
                while ((end = str.indexOf(letters[i], start)) != -1) 
                {
                    buf.append(str.substring(start, end)).append(newToken);
                    start = end + 1;
                    if (--max == 0) 
                        break;
                }
            }
        }

        buf.append(str.substring(start));
        return buf.toString();
    }
}

编译结果 => 'Einst*in'

循环不起作用..idk..仅替换数组中的第一个字母...

如果有人愿意帮助我,我将非常感激..

-谢谢!

最佳答案

像这样怎么样?

public String generatClue(String answer,int level){
    if(level >= answer.length()/2)
        return answer.replaceAll("[^ ]","*");

    return answer.substring(0,level)
      + answer.substring(level,answer.length()-level).replaceAll("[^ ]","*")
      + answer.substring(answer.length()-level);
}

输出:

generateClue("Einstein",1);
=> E******n
generateClue("Einstein",3);
=> Ein**ein
generateClue("Einstein",4)
=> Einstein
generateClue("Hans Christian Andersen",4)
=> Hans ********* ****rsen

编辑:这是字符串中随机字符的一个:

public String generatClue2(String answer,int level){
    if(answer.length()==level)
        return answer.replaceAll("[^ ]","*");

    Random rand=new Random();

    for(int i=0; i<level; ++i){
        char c;
        int n;
        do{
            n=rand.nextInt(answer.length());
            c=answer.charAt(n);
        }
        while(c == ' ' || c == '*');
        answer = answer.substring(0,n) + '*' + answer.substring(n+1);
    }
    return answer;
}

输出:

generateClue2("Hans Christian Andersen",4);
=> Han* C*ri*tian Ande*sen
generateClue2("Hans Christian Andersen",4);
=> *ans Chr*sti*n An*ersen
generateClue2("Hans Christian Andersen",17);
=> H**s ******i** ***e****
generateClue2("Hans Christian Andersen",23);
=> **** ********* ********

关于java - 替换/审查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5041891/

相关文章:

java - 如何修复 Java 中的不匹配异常?

python - 查找并替换 Python

c# - 用一个字符替换字符串中的整个字符

regex - Perl 正则表达式 - 我可以说 'if character/string matches, delete it and all to right of it' 吗?

javascript - 从特定元素之间包含的字符串中剪切出一段文本(jquery/javascript)

java - 为什么使用replace方法需要重新定义一个String?

java - 将矩阵变换应用于 BoundingBox

java - 使用 SwingWorker 和 Timer 在标签上显示时间?

java - 如何过滤和排序几 GB 的数据?

java - 在 java 中的 lang.properties 中存储印地语并检索它