Java: Как проверить символ StringBuilder, чтобы увидеть, содержит ли он те же символы, что и запрос новой строки из массива? - PullRequest
16 голосов
/ 08 июля 2010

Я хочу проверить, содержит ли объект Java StringBuilder символ.

Например, у меня есть список продуктов в массиве {apple, pear, orange, персик, cherry,}добавить случайное количество этих типов еды в StringBuilder.

Как мне проверить, содержит ли StringBuilder символ?

Ответы [ 7 ]

9 голосов
/ 27 февраля 2017

Класс StringBuilder не имеет метода contains(), но String. Таким образом, вы можете использовать StringBuilder для построения строки, используя toString(). Затем вызовите contains(), чтобы проверить, содержит ли он этот символ или строку.

Пример:

stringBuilder.toString().contains(characterYouWantToCheck)
7 голосов
/ 26 марта 2018

В классе StringBuilder нет метода contains(), но есть метод indexOf(). Метод indexOf() возвращает -1, когда подстрока не найдена.

Пример:

stringBuilder.indexOf(charactersYouWantToCheck)!=-1
3 голосов
/ 08 июля 2010

Конечно, можно проверять строку, перебирая ее (например, использовать indexOf ()), но я бы использовал Set в этом конкретном случае для добавления фруктов (если он уже существует, он не будет добавлен снова)когда вы закончите добавлять фрукты, преобразуйте набор в строку, например,

Set<String> fruits = new HashSet<String>();
for (String fruit: fruitSource) {
    fruits.add(fruit);
}
StringBuilder sb = new StringBuilder();
for (String fruit: fruits) {
    sb.append(fruit);
    sb.append(", ");
}
return sb.toString();
2 голосов
/ 08 июля 2010

Другой вариант - создать List<String> из всех опций и использовать Collections.shuffle для случайной перестановки списка. Затем вы можете объединить первые n элементов.

Поскольку Collections.shuffle и объединение первых n элементов занимают линейное время, весь процесс должен занимать линейное время.

1 голос
/ 08 июля 2010

Вы не должны «проверять» что-либо, чтобы сделать это, вы должны сделать это так, чтобы дубликаты никогда не добавлялись в первую очередь.Для этого:

  1. начните с List<String> из опций
    • скопируйте список
    • добавьте случайный элемент к результату
    • удалите этот элемент.
    • Возвращайтесь к 3, пока не добавите столько элементов, сколько хотите, или их больше не осталось
0 голосов
/ 20 октября 2016

Простой способ сделать это похож на решение Марка ван Кемпена , но меньше.

Set<String> fruits = new HashSet<String>();
StringBuilder sb = new StringBuilder();
for (String fruit: fruits) {
    if(fruits.add(fruit)){
        sb.append(fruit);
        sb.append(", ");
    }
}
return sb.toString();
0 голосов
/ 08 июля 2010
import java.util.Random;

public class Test {
    public static void main(String args[]) {
        String[] fruits = { "apple", "pear", "orange", "peach", "cherry" };

        StringBuilder sb = new StringBuilder("Some fruits: apple");

        Random r = new Random();
        int N = 3;
        for (int i = 0; i < N; i++) {
            String toAdd;
            do {
                toAdd = fruits[r.nextInt(fruits.length)];
            } while (sb.indexOf(toAdd) != -1);

            sb.append(", " + toAdd);
        }

        System.out.println(sb);
    }    
}

Выход:

Some fruits: apple, pear, orange, peach

Но я согласен с Майклом Боргвардтом в том, что проверять использование индекса снова и снова плохо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...