【问题标题】:How to check character values on a String array?如何检查字符串数组上的字符值?
【发布时间】:2018-04-22 05:11:08
【问题描述】:

我被要求编写一个 Java 程序,它从用户那里获取 5 个字符串并将其收集到一个数组中。此外,我需要检查数组中的每个字符串,只打印超过四个字符的字符串。

public static void main(String[] args) {
    Scanner mbk = new Scanner(System.in);
    int repetition[] = { 1, 2, 3, 4, 5 };
    String words[] = new String[repetition.length];
    for (int i = 0; i < words.length; i++) {
        System.out.println("Please enter element " + repetition[i] + ":");
        words[i] = mbk.nextLine();
    }
}

这是我编写的代码,我被卡住了。有人可以帮忙吗?

【问题讨论】:

  • 我卡住了卡住了什么?有什么问题?
  • 你需要做另一个循环,一个if检查长度和另一个System.out.println基本上你需要做更多你已经做过的事情。注意:repetition 不需要数组
  • 欢迎来到 SO。整洁的代码,不错。我只有一个建议:我们已经离开了使用奇怪的缩写来命名变量的时代。您的代码应该立即可供其他开发人员阅读。那么mbk 是什么意思呢?也许你可以用一个富有表现力的名字来代替它?
  • Arrays.stream(words).filter(s -&gt; s.length() &gt; 4).forEach(System.out::println) :o)
  • 非常感谢!再次感谢有关 mbk 东西的提醒,这是我名字的首字母,所以我无法注意到你们的困难。我能够完成我被卡住的代码。再次感谢您的帮助!

标签: java arrays string loops


【解决方案1】:

首先,使用像mbk 这样的变量名是一种非常糟糕的做法,任何其他阅读您的代码的开发人员都应该很容易理解该变量名。它的名字应该反映它的目的。这是您的代码的一个小修改。

另外,让 I/O 流保持打开状态会给您带来很大的麻烦,所以我还添加了 scanner.close 语句。

public static void main(String[] args) throws Exception {
    Scanner userInput = new Scanner(System.in);
    int maxArrayLength[] = { 1, 2, 3, 4, 5 };
    String words[] = new String[maxArrayLength.length];
    for (int i = 0; i < words.length; i++) {
        System.out.println("Please enter element " + maxArrayLength[i] + ":");
            words[i] = userInput.nextLine();
        }

    for(int lengthCheckCounter = 0; lengthCheckCounter < words.length; lengthCheckCounter++)
        if(words[lengthCheckCounter].length() > 4)
            System.out.println(words[lengthCheckCounter] + "-" + words[lengthCheckCounter].length());
        userInput.close();
}

关闭 I/O 流/资源的另一种方法是使用自 JDK 1.7 以来的 try-with-resources 块。然后我们可以编写你的代码如下:

try(Scanner userInput = new Scanner(System.in)) {
    // All other code
}

如果您在JDK 1.8 上,您可以按照 Lonely Neuron 评论中的建议使用一行来完成所有操作:

// Initialize your words array here
// Take user input
// Print words greater than 4 using JDK 1.8 Filter below
Arrays.stream(words).filter(s -> s.length() > 4).forEach(System.out::println)

【讨论】:

  • 感谢您的明智帮助,我能够完成代码。我会在我进一步的项目中考虑您的建议。
  • 乐于助人:)
  • 这里的scanner.close() 是错误的,因为你没有打开扫描仪。 System.in 已为您打开(由操作系统),关闭它不是您的责任。例如,如果您在文件上打开扫描仪,那就不同了。
【解决方案2】:

哟,我明白了:

这将遍历整个列表,并打印长度大于 4 的任何内容。

for (int i = 0; i < yourArray.length; i++) {
    if (yourArray[i].length() > 4) {
         System.out.println(yourArray[i]);
    }
}

【讨论】:

  • 非常感谢!您的代码解决了我需要解决的确切问题。
  • @Mesut Berk Karataş 我的评论回答了这个问题,还是回答了我上面的问题?
  • 我首先看到了你的评论,它已经奏效了,我也尝试了上面的评论。
  • 啊,好的。乐于助人。
【解决方案3】:

使用length() 方法

for(String s: words){
    if(s.length()>=4){
        System.out.println(s);
    }
 }

【讨论】:

  • 谢谢你,我终于完成了!
  • 很高兴它有帮助:)
【解决方案4】:

words[j].length() 将为您提供数组索引j 中的字符串长度。我让你将它与 4 进行比较,并引入一个变量 j(你可以再次将其称为 i 或任何其他你认为合适的名称)。

【讨论】:

    【解决方案5】:
    import java.util.Scanner;
    
    public class StackOf4 {
    
        public static void main(String[] args) {
    
            Scanner scn=new Scanner(System.in);
    
            String[] names=new String[5];
    
    
            for(int i=0;i<5;i++) {
    
    
                System.out.println("Enter a string:");
                names[i]=scn.nextLine();
    
            }
    
            System.out.println("The strings with more than 4 characters are: ");
    
            for(int i=0;i<5;i++) {
    
                if(names[i].length()>4)
                System.out.println(names[i]);
    
            }
    
    
        }
    
    
    }
    

    【讨论】:

      猜你喜欢
      • 2022-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-11
      • 1970-01-01
      • 2017-03-31
      • 1970-01-01
      相关资源
      最近更新 更多