簡體   English   中英

java:如何檢查 StringBuilder 字符以查看它是否包含與來自數組的新字符串請求相同的字符?

[英]java: How to check StringBuilder charcters to see if it contains same characters as new string request from array?

我想檢查一個 Java StringBuilder對象是否包含一個字符。

例如,我有一個數組 {apple, pear, orange, peach,cherry} 中的食物列表,我想將這些食物類型的隨機數添加到 StringBuilder。

如何檢查 StringBuilder 是否包含字符?

StringBuilder類沒有contains()方法,但它有indexOf()方法。 indexOf()方法在未找到子字符串時返回-1

例子:

stringBuilder.indexOf(charactersYouWantToCheck)!=-1

StringBuilder類沒有contains()方法,但String有。 因此,您可以使用StringBuilder使用toString()來構建字符串。 然后在其上調用contains()以檢查它是否包含該字符或字符串。

例子:

stringBuilder.toString().contains(characterYouWantToCheck)

當然可以通過迭代來檢查字符串(例如使用 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();

另一種選擇是創建一個List<String>的所有選項,並使用Collections.shuffle隨機排列列表。 然后,您可以將前 n 個元素連接在一起。

由於Collections.shuffle和將前 n 個元素連接在一起都需要線性時間,因此整個過程應該需要線性時間。

你不應該“檢查”任何事情來做到這一點,你應該這樣做,以便一開始就不會添加重復項。 要做到這一點:

  1. 從選項的List<String>開始
    • 復制列表
    • 在結果中添加一個隨機元素
    • 刪除該元素。
    • 返回到 3,直到您添加了任意數量的元素,或者不再剩下任何元素
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

但我同意 Michael Borgwardt 的觀點,即一遍又一遍地檢查使用 index-of 是一件壞事。

一種簡單的方法類似於Marc van Kempen的解決方案,但更小。

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();
strb2.indexOf(String.valueOf(strb1.charAt(i))

strb2strb1StringBuilder類的對象。 如果該字母存在,它將返回其索引,否則返回-1.

Java StringBuilder 沒有contains方法因此您可以檢查字符串或字符是否包含在 StringBuilder 中,如下所示:

StingBuilder sb = new StringBuilder("apple, pear, orange, peach, cherry");
if(sb.indexOf("someFruit") == -1) {
   //you can insert
} else {
   // do something
}
//StringBuilder object

    StringBuilder sb = new StringBuilder("One Two Three");
    
    System.out.println( contains(sb, "One") );
    System.out.println( contains(sb, "Two") );
    System.out.println( contains(sb, "Five") );

輸出:

true
true
false

StringBuilder沒有contains()方法,但它有indexOf()方法。 因此,您可以檢查字符的索引,如果它返回-1 ,則該字符不存在於StringBuilder中。

StringBuilder sb = new StringBuilder();

if(sb.indexOf(CharacterYouWantToCheck) != -1){
   //sb contains character
}

在這里,我使用chars().forEach()遍歷字符串以在 StringBuilder 中找到匹配的字符

public static void findMatch(String s){

    StringBuilder sb = new StringBuilder();
    sb.append("can");
    s.chars().forEach(i -> {

        if(sb.indexOf(String.valueOf((char)i))!= -1)
            System.out.println("Found char is "+String.valueOf((char)i));
    });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM