2017-01-25 8 views
1

Файл, состоящий из многих слов, где некоторые слова являются чисто «UPPERCASE», некоторые слова имеют чисто «нижний регистр», а остальные находятся в «miXeDCasE»? Я хочу загрузить эти слова в объект Arraylist, но он не должен позволять загружать слова в UPPERCASE.Можем ли мы ограничить конкретный строковый регистр при загрузке его в объект Arraylist?

Можем ли мы достичь этого с помощью Java Generics? Как ?

Для примера: поскольку мы можем достичь только числа, можно добавить в объект Arraylist с помощью ограниченной концепции Java Generics.

> ArrayList <T extends Number> al = new ArrayList<T extends Number>(); 
+3

Не с дженериками, а с java.util.regex.Pattern и java.util.regex.Matcher, да. – Aubin

ответ

1

Я не вещь генерики обеспечивают такую ​​функциональность для вашего требования, но вы можете добиться этого легко со следующей логикой при использовании дженериков не является обязательным для вас

String word = "SomeWordFromYourFile"; 
String wordToUpperCase = word.toUpperCase(); 
if(!wordToUpperCase.equals(word)) { 
    list.add(word); 
} 
+0

Это АБСОЛЮТНО НЕ ОПЫТЬ. – Aubin

+0

Да, я это знаю. Но, как вы, возможно, знаете, что java generics не предоставляет объект, запрошенный пользователем, поэтому я опубликовал один возможный ответ. Если у вас есть лучший ответ, то опубликуйте его, я буду рад его продвинуть – DnA

0

Дженерики является NO. Но регулярные выражения - лучшие инструменты для обработки сценариев такого типа.

Демо-версия: Рассмотрите массив String, содержащий слова. Позже в вашем коде, вы можете заменить этот массив с содержимым файлов, которые вы читаете в.

String[] words = { "UPPER", "lower", "LowER", "don", "shawn", "DUDE", "BAGGAGE", "buddy", "FrIeNd", "NeRd", 
       "geek", "FREAK" }; 

Теперь давайте фильтровать этот массив и пропустить заглавные слова и добавить остальное ArrayList

List<String> filteredWords = new ArrayList<>(); 
for(String eachWord : words){ 
      //Matches one or more occurrence 
      if(!eachWord.matches("[A-Z]+")){ 
       filteredWords.add(eachWord); 
      }else{ 
       continue; 
      } 
     } 
//Print the resulting array 
System.out.println(Arrays.toString(filteredWords.toArray())); 

И генерируемый вывод будет:

[ниже, ниже, дон, Shawn, приятель, Friend, ботаник, выродок]

Надеюсь, это то, чего вы пытались достичь.

+0

@Aubin, вы правы. * совпадает с нулем или более вхождениями, где в качестве + совпадает хотя бы один или несколько, и в этом случае + будет больше. Спасибо за указание. Я отредактировал свой пост соответственно. –