Вы можете использовать регулярные выражения для обработки, например, так:
public static void main(String[] args) {
String str = "This string has FIVE uppercase characters within itself.";
System.out.println(str.replaceAll("[^\\p{javaUpperCase}]","").length());
}
Вывод:
5
Это примерно эквивалентно следующему:
public static void main(String[] args) {
String str = "This string has FIVE uppercase characters within itself.";
int uppercases = 0;
for(char c : str.toCharArray()) {
uppercases += Character.isUpperCase(c) ? 1 : 0;
}
System.out.println(uppercases);
}
Вывод:
5
Теперь, при условии, что у вас есть эта функциональность (что вы делаете) в некотором методе:
public static int sumLetter(String m) { ... }
Вы хотите связать строку с длиной в верхнем регистре.Создайте простой класс данных:
final class StringWithUppercaseSize {
public final String string;
public final int uppercaseLength;
public StringWithUppercaseSize(String string, int uppercaseLength) {
this.string = string;
this.uppercaseLength = uppercaseLength;
}
public int getUppercaseLength() {
return this.uppercaseLength;
}
}
Теперь вы создаете массив из следующих объектов:
Scanner input = new Scanner(System.in);
String s1 = input.nextLine();
String s2 = input.nextLine();
String s3 = input.nextLine();
int i1 = sumLetter(s1);
int i2 = sumLetter(s2);
int i3 = sumLetter(s3);
StringWithUppercaseSize[] sizes = { new StringWithUppercaseSize(s1, i1), new StringWithUppercaseSize(s2, i2), new StringWithUppercaseSize(s3, i3) };
Сортировка массива по верхнему размеру:
Arrays.sort(sizes, Comparator.comparing(StringWithUppercaseSize::getUppercaseLength));
Выведите минимальную / максимальную заглавную строку / длины:
System.out.println(sizes[0].string + " has a minimum number of uppercase: "+ sizes[0].uppercaseLength);
System.out.println(sizes[2].string + " has a maximum number of uppercase: "+ sizes[2].uppercaseLength);
Ввод:
Abc
abc
aBC
Вывод:
abc has a minimum number of uppercase: 0
aBC has a maximum number of uppercase: 2
Вот мой полный тестовый код:
Main.java
class Main {
public static void main(String[] args) {
System.out.println("Please input a string:");
Scanner input = new Scanner(System.in);
String s1 = input.nextLine();
String s2 = input.nextLine();
String s3 = input.nextLine();
int i1 = sumLetter(s1);
int i2 = sumLetter(s2);
int i3 = sumLetter(s3);
StringWithUppercaseSize[] sizes = { new StringWithUppercaseSize(s1, i1), new StringWithUppercaseSize(s2, i2), new StringWithUppercaseSize(s3, i3) };
Arrays.sort(sizes, Comparator.comparing(StringWithUppercaseSize::getUppercaseLength));
System.out.println(sizes[0].string + " has a minimum number of uppercase: "+ sizes[0].uppercaseLength);
System.out.println(sizes[2].string + " has a maximum number of uppercase: "+ sizes[2].uppercaseLength);
}
public static int sumLetter(String m) {
int count = 0;
for(int i = 0; i < m.length();i++) {
if(Character.isUpperCase(m.charAt(i)))
count++;
}
return count;
}
}
StringWithUppercaseSize.java
final class StringWithUppercaseSize {
public final String string;
public final int uppercaseLength;
public StringWithUppercaseSize(String string, int uppercaseLength) {
this.string = string;
this.uppercaseLength = uppercaseLength;
}
public int getUppercaseLength() {
return this.uppercaseLength;
}
}
Наконец, как примечание, не делайте это в коде, который вы намереваетесь хранить и поддерживать.Есть много способов сделать вещи более читабельными и понятными.Например, вы можете написать фактические методы получения / установки для вашего класса данных.Вы можете сделать общедоступные элементы данных закрытыми, чтобы сохранить скрытую информацию.Вы можете добавить пользовательские входные данные в список, а затем использовать такие вещи, как цикл for-each, чтобы создать еще один список в верхнем регистре.Вы можете просмотреть оба этих списка с помощью цикла for-each, чтобы создать список из StringWithUppercaseSize
s.Вероятно, вы можете использовать Stream с Collectors.maxBy, чтобы найти максимальное количество элементов вместо сортировки и т. Д.