Подтвердить что ты не робот

Генератор случайных строк Android

У меня проблема. Я хочу нарисовать случайный String что-то вроде этого aXcFg3s2. Что я делаю плохо? Как изменить мой random()

private String random;
private String charsEntered;
private EditText et;
private Button ok;
CaptchaInterface.OnCorrectListener mCorrectListener;

public void setOnCorrectListener(CaptchaInterface.OnCorrectListener listener) {
    mCorrectListener = listener;
}

public TextCaptcha(Context context) {
    super(context);
    getWindow().requestFeature(Window.FEATURE_NO_TITLE);
}

public static String random() {
    Random generator = new Random();
    String x = (String) (generator.nextInt(96) + 32);
    return x;
}

public void onCreate(Bundle icicle) {
    setContentView(R.layout.main);
    random = random();
    TextView display = (TextView) findViewById(R.id.textView1);
    display.setText("Random Number: " + random); // Show the random number
    et = (EditText) findViewById(R.id.etNumbers);
    ok = (Button) findViewById(R.id.button1);
    ok.setOnClickListener(this);

}

public void onClick(View arg0) {
    // TODO Auto-generated method stub
    try {
        charsEntered = et.getText().toString();
    } catch (NumberFormatException nfe) {
        Toast.makeText(et.getContext(), "Bla bla bla",
                Toast.LENGTH_LONG).show();
    }

    if (random == charsEntered) {
        Toast.makeText(et.getContext(), "Good!", Toast.LENGTH_LONG).show();
    } else {
        Toast.makeText(et.getContext(), "Bad!", Toast.LENGTH_LONG).show();
    }
}
4b9b3361

Ответ 1

В коде есть несколько ошибок.

Вы не можете преобразовать из int в строку. Внесите его вместо char. Это, однако, даст вам только один char, так что вместо этого вы можете создать случайное число для длины вашей строки. Затем запустите цикл for для генерации случайных символов. Вы также можете определить StringBuilder и добавить к нему символы, затем получить свою случайную строку с помощью метода toString()

Пример:

public static String random() {
    Random generator = new Random();
    StringBuilder randomStringBuilder = new StringBuilder();
    int randomLength = generator.nextInt(MAX_LENGTH);
    char tempChar;
    for (int i = 0; i < randomLength; i++){
        tempChar = (char) (generator.nextInt(96) + 32);
        randomStringBuilder.append(tempChar);
    }
    return randomStringBuilder.toString();
}

Кроме того, вы должны использовать random.compareTo(), а не ==

Ответ 2

проблема в том, что вы обрабатывали только один символ вместо использования цикла.

Вы можете создать массив символов, в котором все символы, которые вы хотите разрешить включить в случайную строку, затем в цикле возьмите произвольную позицию из массива и добавьте add и добавьте его в stringBuilder. в конце преобразуйте stringBuilder в строку.


РЕДАКТИРОВАТЬ: вот простой алгоритм, который я предложил:

private static final String ALLOWED_CHARACTERS ="0123456789qwertyuiopasdfghjklzxcvbnm";

private static String getRandomString(final int sizeOfRandomString)
  {
  final Random random=new Random();
  final StringBuilder sb=new StringBuilder(sizeOfRandomString);
  for(int i=0;i<sizeOfRandomString;++i)
    sb.append(ALLOWED_CHARACTERS.charAt(random.nextInt(ALLOWED_CHARACTERS.length())));
  return sb.toString();
  }

и на Котлин:

companion object {
    private val ALLOWED_CHARACTERS = "0123456789qwertyuiopasdfghjklzxcvbnm"
}

private fun getRandomString(sizeOfRandomString: Int): String {
    val random = Random()
    val sb = StringBuilder(sizeOfRandomString)
    for (i in 0 until sizeOfRandomString)
        sb.append(ALLOWED_CHARACTERS[random.nextInt(ALLOWED_CHARACTERS.length)])
    return sb.toString()
}

Ответ 3

Вам нужно импортировать UUID. Вот код

import java.util.UUID;

id = UUID.randomUUID().toString();

Ответ 4

Вот как я генерирую свои случайные строки с желаемыми символами и желаемой длиной

          char[] chars1 = "ABCDEF012GHIJKL345MNOPQR678STUVWXYZ9".toCharArray();
                                StringBuilder sb1 = new StringBuilder();
                                Random random1 = new Random();
                                for (int i = 0; i < 6; i++)
                                {
                                    char c1 = chars1[random1.nextInt(chars1.length)];
                                    sb1.append(c1);
                                }
                                String random_string = sb1.toString();  

Ответ 5

Вы можете просто использовать следующий метод для генерации случайной строки с 5 символами, и она вернет массивList случайной строки

public ArrayList<String> generateRandomString() {

    ArrayList<String> list = new ArrayList<>();
    Random rnd = new Random();
    String str = "";

    String randomLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    String randomLetterSmall = "abcdefghijklmnopqrstuvwxyz";

    for (int n = 0; n < 50; n++) {
        str = String.valueOf(randomLetters.charAt(rnd.nextInt(randomLetters.length())));

        str += String.valueOf(randomLetterSmall.charAt(rnd.nextInt(randomLetters.length())));
        str += String.valueOf(randomLetterSmall.charAt(rnd.nextInt(randomLetters.length())));
        str += String.valueOf(randomLetterSmall.charAt(rnd.nextInt(randomLetters.length())));
        str += String.valueOf(randomLetterSmall.charAt(rnd.nextInt(randomLetters.length())));

        //Copy above line to increase character of the String
        list.add(str);
    }
    Collections.sort(list);
    return list;
}

Ответ 6

Вы не можете передать int в String. Попробуйте:

 Random generator = new Random();
 String x = String.valueOf (generator.nextInt(96) + 32);

Ответ 7

final  String[] Textlist = { "Text1", "Text2", "Text3"};

TextView yourTextView = (TextView)findViewById(R.id.yourTextView);

Random random = new Random();

String randomText = TextList[random.nextInt(TextList.length)];

yourTextView.setText(randomText);

Ответ 8

Эта функция запускается в котлине ->

fun randomString(stringLength: Int): String {
    val list = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".toCharArray()
    var randomS = ""
    for (i in 1..stringLength) {
        randomS += list[getRandomNumber(0, list.size - 1)]
    }
    return randomS
}

fun getRandomNumber(min: Int, max: Int): Int {
   return Random().nextInt((max - min) + 1) + min
}

Или вы можете использовать мою библиотеку https://github.com/Aryan-mor/Utils-Library