簡體   English   中英

如何排除字符串中特定單詞的大寫?

[英]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.

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