Там функциональность состоит в том, чтобы генерировать случайный символ в Java?

public class XmlFileRead {

public static void main(String[] args) throws IOException {
    FileInputStream fi = new FileInputStream("abc.xls");
    ArrayList<EmployeeVo> al = new ArrayList<>();
    EmployeeVo evo = null;
    Scanner scanner = null;

    Workbook wb = new XSSFWorkbook(fi);
    Sheet sh = wb.getSheet("Sheet0");
    int starRow = sh.getFirstRowNum();
    int endRow = sh.getLastRowNum();

    for (int i = starRow + 1; i < endRow; i++) {
        scanner = new Scanner(System.in);
        evo = new EmployeeVo();
        Cell c = wb.getSheetAt(0).getRow(i).getCell(1);
        evo.setEmployeeId((int) c.getNumericCellValue());

        Cell c2 = wb.getSheetAt(0).getRow(i).getCell(2);
        evo.setEmployeeName(c2.toString());
        // add to collection
        al.add(evo);
    } // for

    al.forEach(i -> {
        System.out.println(i.getEmployeeId() + " " + i.getEmployeeName());
    });

}
}
55
задан Chris 13 April 2010 в 03:45
поделиться

8 ответов

Есть много способов сделать это, но да, это включает генерацию случайного int (используя, например, java.util.Random.nextInt) и затем использование его для сопоставления с char. Если у вас есть определенный алфавит, то можно использовать что-то вроде этого:

    import java.util.Random;

    //...

    Random r = new Random();

    String alphabet = "123xyz";
    for (int i = 0; i < 50; i++) {
        System.out.println(alphabet.charAt(r.nextInt(alphabet.length())));
    } // prints 50 random characters from alphabet

Обратите внимание, что java.util.Random на самом деле является псевдогенератором случайных чисел, основанным на довольно слабой формуле линейной конгруэнтности. Вы упомянули о необходимости использования криптографии; возможно, в этом случае вам стоит рассмотреть возможность использования гораздо более сильного криптографически безопасного генератора псевдослучайных чисел (например, java.security.SecureRandom).

81
ответ дан 26 November 2019 в 17:33
поделиться

Это - короткий ответ:

import java.util.UUID;

UUID.randomUUID();
0
ответ дан 26 November 2019 в 17:33
поделиться

используя доллар :

Iterable<Character> chars = $('a', 'z'); // 'a', 'b', c, d .. z

с учетом символов , вы можете создать "перемешанный" диапазон символов:

Iterable<Character> shuffledChars = $('a', 'z').shuffle();

затем взяв первые n символов, вы получите случайную строку длины n . Окончательный код выглядит просто:

public String randomString(int n) {
    return $('a', 'z').shuffle().slice(n).toString();
}

NB : условие n> 0 проверяется срезом

EDIT

, как правильно указал Стив, randomString использует не более одного раза каждую букву. В качестве обходного пути вы можете повторить алфавит m раз перед вызовом перемешать :

public String randomStringWithRepetitions(int n) {
    return $('a', 'z').repeat(10).shuffle().slice(n).toString();
}

или просто указать свой алфавит в виде String :

public String randomStringFromAlphabet(String alphabet, int n) {
    return $(alphabet).shuffle().slice(n).toString();
}

String s = randomStringFromAlphabet("00001111", 4);
1
ответ дан 26 November 2019 в 17:33
поделиться
   Random randomGenerator = new Random();

   int i = randomGenerator.nextInt(256);
   System.out.println((char)i);

Должно получиться то, что вы хотите, если считать символами '0,'1','2'....

-2
ответ дан 26 November 2019 в 17:33
поделиться

Можно использовать генераторы из Quickcheck specification-based test framework.

Для создания случайной строки используйте метод anyString.

String x = anyString();

Вы можете создавать строки из более ограниченного набора символов или с ограничениями на минимальный/максимальный размер.

Обычно вы запускаете тесты с несколькими значениями:

@Test
public void myTest() {
  for (List<Integer> any : someLists(integers())) {
    //A test executed with integer lists
  }
}
1
ответ дан 26 November 2019 в 17:33
поделиться
private static char rndChar () {
    int rnd = (int) (Math.random() * 52); // or use Random or whatever
    char base = (rnd < 26) ? 'A' : 'a';
    return (char) (base + rnd % 26);

}

Создает значения в диапазонах от a до z, от A до Z.

10
ответ дан 26 November 2019 в 17:33
поделиться

Чтобы сгенерировать случайный символ в азбуке:

Random r = new Random();
char c = (char)(r.nextInt(26) + 'a');
118
ответ дан 26 November 2019 в 17:33
поделиться

Взгляните на класс Java Randomizer . Я думаю, что вы можете рандомизировать символ, используя метод randomize (char [] array).

0
ответ дан 26 November 2019 в 17:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: