Java 如何输出与其连接的字符串';大写字母长度

Java 如何输出与其连接的字符串';大写字母长度,java,string,loops,char,Java,String,Loops,Char,在我试图创建的这个程序中,我有一个方法,用一个字符串来计算大写字母的数量。在程序的末尾,我想显示与它的字符串相关联的最小数量和与它的字符串相关联的最大数量,这是我遇到问题的地方。有没有办法把这些联系起来?以下是我目前的代码: import java.util.Scanner; import java.util.Arrays; public class test { public static void main(String[] args) { System.out.pr

在我试图创建的这个程序中,我有一个方法,用一个字符串来计算大写字母的数量。在程序的末尾,我想显示与它的字符串相关联的最小数量和与它的字符串相关联的最大数量,这是我遇到问题的地方。有没有办法把这些联系起来?以下是我目前的代码:

import java.util.Scanner;
import java.util.Arrays;
public class test {
    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);


        int[] array = new int[3];
        array[0] = i1;
        array[1] = i2;
        array[2] = i3;
        Arrays.sort(array);

        System.out.println(s1 + " has a maximum number of uppercase: "+ array[2]);
        System.out.println(s3 + " has a maximum number of uppercase: "+ array[0]);


    }
    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;
    }

    }
import java.util.Scanner;
导入java.util.array;
公开课考试{
公共静态void main(字符串[]args){
System.out.println(“请输入字符串:”);
扫描仪输入=新扫描仪(System.in);
字符串s1=input.nextLine();
字符串s2=input.nextLine();
字符串s3=input.nextLine();
int i1=一个字母(s1);
int i2=一个字母(s2);
int i3=三个字母(s3);
int[]数组=新的int[3];
数组[0]=i1;
数组[1]=i2;
数组[2]=i3;
数组。排序(数组);
System.out.println(s1+”的最大大写字母数为:“+array[2]);
System.out.println(s3+”的最大大写字母数为:“+array[0]);
}
公共静态整数字母(字符串m){
整数计数=0;
对于(int i=0;i
您可以使用正则表达式来处理此问题,如下所示:

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
5
abc has a minimum number of uppercase: 0
aBC has a maximum number of uppercase: 2
这大致相当于以下内容:

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
5
abc has a minimum number of uppercase: 0
aBC has a maximum number of uppercase: 2
现在,假设您在某个方法中具有此功能(您是这样做的):

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
输出:

5
5
abc has a minimum number of uppercase: 0
aBC has a maximum number of uppercase: 2
以下是我的完整测试代码:

Main.java


最后,请注意,不要在您打算保留和维护的代码中这样做。有很多方法可以让事情变得更可读和可维护。例如,您可以为数据类编写实际的getter/setter。您可以将公共数据成员设置为私有,以保留信息隐藏。您可以将用户输入附加到列表中,然后使用for each循环之类的方法创建另一个大写大小的列表。您可以使用for each循环遍历这两个列表,以创建
StringWithUppercaseSize
s的列表。您可能可以使用Collectors.maxBy流来查找最大元素,而不是排序等。

wow man感谢您如此清楚地解释了这一点。我将学习更多关于物体的知识,它们似乎使事情变得更容易。嘿,伙计,很抱歉再次打扰你。由于我对对象不熟悉,所以我仍在努力更清楚地理解它。如果可能的话,请解释每一行好吗?@Exrial哪部分的每一行?在main方法中声明int i3后的部分。我很难理解数组的大小。StringWithUppercaseSize[]大小={新StringWithUppercaseSize(s1,i1),新StringWithUppercaseSize(s2,i2),新StringWithUppercaseSize(s3,i3)};这是一个方法,它做什么?它是一个数组初始值设定项。它说,“让
size
成为一个由以下元素组成的新数组:一个新StringWithUppercaseSize在其构造函数中采用参数s1和i1,一个新StringWithUppercaseSize在其构造函数中采用参数s2和i2,以及一个新StringWithUppercaseSize在其构造函数中采用参数s3和i3”。然后,
Arrays.sort
根据
getUppercaseLength
方法返回的值对
sizes
的内容(即创建的
StringWithUppercaseSize
s)进行排序。