Java 从'简化s.charAt;a';|';b';|';c';|致某人

Java 从'简化s.charAt;a';|';b';|';c';|致某人,java,string,if-statement,for-loop,Java,String,If Statement,For Loop,我正在制作一个字母计数程序。是否有一种方法可以使用一个大小写来增加字符串中的字母数,而不是使用26个大小写。有可能简化这个程序吗 import javax.swing.JOptionPane; public class CountLetters { public static void main(String[] args) { { String str = JOptionPane.showInputDialog("Enter any text.");

我正在制作一个字母计数程序。是否有一种方法可以使用一个大小写来增加字符串中的字母数,而不是使用26个大小写。有可能简化这个程序吗

import javax.swing.JOptionPane;
public class CountLetters
{
   public static void main(String[] args)
   {
      {
      String str = JOptionPane.showInputDialog("Enter any text.");
      int count = 0;
      String s = str.toLowerCase(); 
      for (int i = 0; i < s.length(); i++) {
          if (s.charAt(i)==('a')||s.charAt(i)=='b'||s.charAt(i)=='c'||s.charAt(i)=='d'||s.charAt(i)=='e'||s.charAt(i)=='f'||
        s.charAt(i)=='g'||s.charAt(i)=='h'||s.charAt(i)=='i'||s.charAt(i)=='j'||s.charAt(i)=='k'||s.charAt(i)=='l'||
        s.charAt(i)=='m'||s.charAt(i)=='n'||s.charAt(i)=='o'||s.charAt(i)=='p'||s.charAt(i)=='q'||s.charAt(i)=='r'||
        s.charAt(i)=='s'||s.charAt(i)=='t'||s.charAt(i)=='u'||s.charAt(i)=='v'||s.charAt(i)=='w'||s.charAt(i)=='x'||
        s.charAt(i)=='y'||s.charAt(i)=='z') {
        count++;
        }
      }
      System.out.println("There are " + count + " letters in the string you entered.");
      }
   }
}   
import javax.swing.JOptionPane;
公营书信
{
公共静态void main(字符串[]args)
{
{
String str=JOptionPane.showInputDialog(“输入任何文本”);
整数计数=0;
字符串s=str.toLowerCase();
对于(int i=0;i

有没有办法简化此程序,使其只存在一个if条件,而不是26?

只需使用大于运算符和小于运算符:

if (s.charAt(i) >= 'a' && s.charAt(i) <= 'z')

if(s.charAt(i)>=“a”和&s.charAt(i)您可以使用Java的字符类:

public String numLetters(String str){
    int count=0;
    for(int i=0; i<str.length(); i++){
        if(Character.isLetter(str.charAt(i))){
            count++;
        }
    }
    return count;
}
公共字符串numletter(字符串str){
整数计数=0;

对于(int i=0;i您可以避免同时使用
char
,并通过
matches()将
substring()
与正则表达式一起使用

(是,
(i,i+1)
…结束索引是独占的)

编辑以添加:在思考时

if(Character.isLowerCase(s.chatAt(i))

可能更好。忽略使用正则表达式的任何性能影响,这是最容易阅读的;查看它的人会立即理解其意图。

您甚至不需要循环

int count = str.replaceAll("[^a-zA-Z]","").length();
System.out.println("There are " + count + " letters in the string you entered.");

取决于是否可以接受高Unicode小写,
Character.isLowerCase()
可能更具可读性。这非常接近,只是它也会匹配大写。是的,因此可以使用Character.isLowerCase(char)而不是Character.isLowerCase(char)相反,如果您只想计算小写字母soooo…编辑您的答案;)他的代码只计算小写字母。我想他是在计算字母的数量,而不仅仅是小写字母。他之所以将代码转换为小写字母,是因为他可以使用这26种不同的大小写。如果他不将代码转换为小写字母,那么他将得到52种不同的大小写,这将是一种打字的痛苦。是的,我完全跳过了over他调用
toLowerCase()
@doorknobofs的地方现在你使用
匹配项
无论如何都是错误的。
匹配项
仅在整个字符串与模式匹配时返回
true
,因此只有当
s
正好是一个字符长时,这才有效。(而且
子字符串的1-arg版本也没有帮助。)请注意,在模式开始时使用
^
是多余的,当使用
s.matches
时。@ajb哎呀,嘎,我的心思都集中在Ruby正则表达式上了,因为我最近一直在用它编程:P抱歉,我要删除我的comments@DoorknobofSnow你让我仔细检查了一下我的精神状态:-)
int count = str.replaceAll("[^a-zA-Z]","").length();
System.out.println("There are " + count + " letters in the string you entered.");