[英]How do I exclude capitalizing specific words in a String?
我是編程新手,在這里我需要大寫用戶的輸入,其中不包括某些單詞。
例如,如果輸入是THIS IS A TEST,我得到This Is A Test
但是,我想得到這是一種測試格式
String s = in.nextLine();
StringBuilder sb = new StringBuilder(s.length());
String wordSplit[] = s.trim().toLowerCase().split("\\s");
String[] t = {"is","but","a"};
for(int i=0;i<wordSplit.length;i++){
if(wordSplit[i].equals(t))
sb.append(wordSplit[i]).append(" ");
else
sb.append(Character.toUpperCase(wordSplit[i].charAt(0))).append(wordSplit[i].substring(1)).append(" ");
}
System.out.println(sb);
}
這是迄今為止我得到的最接近的,但我似乎無法排除大寫特定單詞。
您已經進行了一次迭代。 再做一次; 為wordSplit
每個 String 迭代t
中的每個 String :
for (int i = 0; i < wordSplit.length; i++){
boolean found = false;
for (int j = 0; j < t.length; j++) {
if(wordSplit[i].equals(t[j])) {
found = true;
}
}
if (found) { /* do your stuff */ }
else { }
}
你的問題(正如@sleepToken 指出的)是
if(wordSplit[i].equals(t))
正在檢查當前單詞是否等於包含關鍵字的數組。
相反,您要做的是檢查數組是否包含給定的輸入詞,如下所示:
if (Arrays.asList(t).contains(wordSplit[i].toLowerCase()))
請注意,沒有“區分大小寫”的contains()
方法,因此在搜索之前將相關單詞轉換為小寫非常重要。
問題是您正在將每個單詞與整個數組進行比較。 Java 並沒有禁止這樣做,但它實際上並沒有多大意義。 相反,您可以循環數組中的每個單詞並比較它們,但這在代碼中有點冗長,而且如果單詞數組變大,速度也不會很快。
相反,我建議從數組創建一個Set
並檢查它是否contains
單詞:
String[] t = {"is","but","a"};
Set<String> t_set = new HashSet<>(Arrays.asList(t));
...
if (t_set.contains(wordSplit[i]) {
...
首先是檢查單詞是否包含在數組中的正確方法。
contains(word) {
for (int i = 0;i < arr.length;i++) {
if ( word.equals(arr[i])) {
return true;
}
}
return false;
}
然后將您的條件wordSplit[i].equals(t)
更改為contains(wordSplit[i]
檢查的話排除java.util.ArrayList.contains()
方法會是一個更好的選擇。
下面的表達式檢查排除列表是否包含單詞,如果不包含首字母大寫:
tlist.contains(x) ? x : (x = x.substring(0,1).toUpperCase() + x.substring(1)))
該表達式也對應於:
if(tlist.contains(x)) { // ?
x = x; // do nothing
} else { // :
x = x.substring(0,1).toUpperCase() + x.substring(1);
}
或者:
if(!tlist.contains(x)) {
x = x.substring(0,1).toUpperCase() + x.substring(1);
}
如果您被允許使用 java 8:
String s = in.nextLine();
String wordSplit[] = s.trim().toLowerCase().split("\\s");
List<String> tlist = Arrays.asList("is","but","a");
String result = Stream.of(wordSplit).map(x ->
tlist.contains(x) ? x : (x = x.substring(0,1).toUpperCase() + x.substring(1)))
.collect(Collectors.joining(" "));
System.out.println(result);
輸出:
This is a Test
您不是在與此行代碼中要忽略的每個單詞進行比較if(wordSplit[i].equals(t))
您可以執行以下操作:
public class Sample {
public static void main(String[] args) {
String s = "THIS IS A TEST";
String[] ignore = {"is","but","a"};
List<String> toIgnoreList = Arrays.asList(ignore);
StringBuilder result = new StringBuilder();
for (String s1 : s.split(" ")) {
if(!toIgnoreList.contains(s1.toLowerCase())) {
result.append(s1.substring(0,1).toUpperCase())
.append(s1.substring(1).toLowerCase())
.append(" ");
} else {
result.append(s1.toLowerCase())
.append(" ");
}
}
System.out.println("Result: " + result);
}
}
輸出是:
Result: This is a Test
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.