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());
});
}
}
Есть много способов сделать это, но да, это включает генерацию случайного 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
).
Это - короткий ответ:
import java.util.UUID;
UUID.randomUUID();
используя доллар :
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);
Random randomGenerator = new Random();
int i = randomGenerator.nextInt(256);
System.out.println((char)i);
Должно получиться то, что вы хотите, если считать символами '0,'1','2'....
Можно использовать генераторы из 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
}
}
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.
Чтобы сгенерировать случайный символ в азбуке:
Random r = new Random();
char c = (char)(r.nextInt(26) + 'a');
Взгляните на класс Java Randomizer . Я думаю, что вы можете рандомизировать символ, используя метод randomize (char [] array).