package com.github.javafaker; import org.apache.commons.lang3.StringUtils; import java.util.ArrayList; import java.util.List; import static org.apache.commons.lang3.StringUtils.capitalize; import static org.apache.commons.lang3.StringUtils.join; public class Lorem { private final Faker faker; protected Lorem(Faker faker) { this.faker = faker; } public char character() { return character(false); } public char character(boolean includeUppercase) { return characters(1).charAt(0); } public String characters() { return characters(255, false); } public String characters(boolean includeUppercase) { return characters(255, false); } public String characters(int minimumLength, int maximumLength) { return characters(faker.random().nextInt(maximumLength - minimumLength) + minimumLength, false); } public String characters(int minimumLength, int maximumLength, boolean includeUppercase) { return characters(faker.random().nextInt(maximumLength - minimumLength) + minimumLength, includeUppercase); } public String characters(int fixedNumberOfCharacters) { return characters(fixedNumberOfCharacters, false); } public String characters(int fixedNumberOfCharacters, boolean includeUppercase) { if (fixedNumberOfCharacters < 1) { return ""; } char[] buffer = new char[fixedNumberOfCharacters]; for (int i = 0; i < buffer.length; i++) { char randomCharacter = characters[faker.random().nextInt(characters.length)]; if (includeUppercase && faker.bool().bool()) { randomCharacter = Character.toUpperCase(randomCharacter); } buffer[i] = randomCharacter; } return new String(buffer); } public List words(int num) { List returnList = new ArrayList(); for (int i = 0; i < num; i++) { returnList.add(word()); } return returnList; } public List words() { return words(3); } public String word() { return faker.fakeValuesService().resolve("lorem.words", this, faker); } /** * Create a sentence with a random number of words within the range 4..10. * @return a random sentence */ public String sentence() { return sentence(3); } /** * Create a sentence with a random number of words within the range (wordCount+1)..(wordCount+6). * @param wordCount * @return a random sentence */ public String sentence(int wordCount) { return sentence(wordCount, 6); } /** * Create a sentence with a random number of words within the range (wordCount+1)..(wordCount+randomWordsToAdd).

* * Set {@code randomWordsToAdd} to 0 to generate sentences with a fixed number of words. * @param wordCount * @param randomWordsToAdd * @return a random sentence */ public String sentence(int wordCount, int randomWordsToAdd) { int numberOfWordsToAdd = randomWordsToAdd == 0 ? 0 : faker.random().nextInt(randomWordsToAdd); return capitalize(join(words(wordCount + numberOfWordsToAdd), " ") + "."); } public List sentences(int sentenceCount) { List sentences = new ArrayList(sentenceCount); for (int i = 0; i < sentenceCount; i++) { sentences.add(sentence()); } return sentences; } public String paragraph(int sentenceCount) { return join(sentences(sentenceCount + faker.random().nextInt(3)), " "); } public String paragraph() { return paragraph(3); } public List paragraphs(int paragraphCount) { List paragraphs = new ArrayList(paragraphCount); for (int i = 0; i < paragraphCount; i++) { paragraphs.add(paragraph()); } return paragraphs; } /** * Create a string with a fixed size. Can be useful for testing * validator based on length string for example * * @param numberOfLetters size of the expected String * @return a string with a fixed size */ public String fixedString(int numberOfLetters) { StringBuilder builder = new StringBuilder(); while (builder.length() < numberOfLetters) { builder.append(sentence()); } return StringUtils.substring(builder.toString(), 0, numberOfLetters); } static { StringBuilder builder = new StringBuilder(36); for (char number = '0'; number <= '9'; number++) { builder.append(number); } for (char character = 'a'; character <= 'z'; character++) { builder.append(character); } characters = builder.toString().toCharArray(); } private static final char[] characters; }