[英]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 個元素連接在一起都需要線性時間,因此整個過程應該需要線性時間。
你不應該“檢查”任何事情來做到這一點,你應該這樣做,以便一開始就不會添加重復項。 要做到這一點:
List<String>
開始
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))
strb2
和strb1
是StringBuilder
類的對象。 如果該字母存在,它將返回其索引,否則返回-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.