Как использовать функцию replaceAll для маскировки чисел? (Java GUI) - PullRequest
0 голосов
/ 21 апреля 2020

Пытаясь замаскировать числа с помощью '*', сгенерированного генератором случайных чисел, как мне go сделать это? AFAIK Я должен использовать функцию replaceAll?

btnGenerate.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                for (int i = 0; i < max; i++) { 
                    int rand = (int)(Math.random() * range) + min;
                    tfNum.setText(rand + "");
                }
            }   
        });

Ответы [ 2 ]

1 голос
/ 21 апреля 2020

replaceAll излишне для этого. Нет необходимости запускать весь механизм регулярных выражений (который будет перекомпилировать регулярное выражение при каждом выполнении) для чего-то, чего вы можете достичь с помощью простого арифметического c и StringBuilder.

, так как вы генерируя число, вы просто генерируете случайное количество звезд. Единственная вещь в немаскированной строке, которая не является ди git, это отрицательный знак.

StringBuilder sb = new StringBuilder();
if (rand < 0) sb.append('-');
do {
  sb.append('*');
  rand /= 10;
} while (rand != 0);  // Use do/while in order to generate '*' when rand is zero initially.
String randStr = sb.toString();

Но в зависимости от диапазона чисел, которые вы можете сгенерировать, может быть проще иметь / еще с небольшой горсткой жестко закодированных строк:

if (rand >= 0 && rand < 10) randStr = "*";
else if (rand >= 10 && rand < 100) randStr = "**";
else if (rand >= 100 && rand < 1000) randStr = "***";
else throw new AssertionError();
1 голос
/ 21 апреля 2020

Используйте регулярное выражение [0-9], чтобы выбрать все числа в вашем методе replaceAll.

Я не могу сказать контекст вашего кода, но вот пример:

String nums = "1212";
nums = nums.replaceAll("[0-9]", "*");
System.out.println(nums);

Результат:

****
...