在java中查找字符串的所有大写字母

所以我试图找到用户输入的字符串中的所有大写字母但我不断收到此运行时错误:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 4 at java.lang.String.charAt(String.java:686) at P43.main(P43.java:13) 

我觉得很愚蠢,但我无法弄清楚这一点,oracle甚至在页面上谈到关于java.lang.StringIndexOutOfBoundsException的 charAt

这是我的代码,用于查找大写字母并打印它们:

 import java.io.*; import java.util.*; public class P43{ public static void main(String[] args){ Scanner in = new Scanner(System.in); //Uppercase String isUp = ""; System.out.print("Please give a string: "); String x = in.next(); int z = x.length(); for(int y = 0; y <= z; y++){ if(Character.isUpperCase(x.charAt(y))){ char w = x.charAt(y); isUp = isUp + w + " "; } } System.out.println("The uppercase characters are " + isUp); //Uppercase } } 

我真的很感激任何输入和/或帮助。

 for(int y = 0; y <= z; y++){ 

应该

 for(int y = 0; y < z; y++){ 

记住数组索引从ZERO开始。

字符串长度返回

字符串中的16位Unicode字符数

因为循环从ZERO开始,循环应终止于长度-1。

超出边界的数组索引是由于for循环没有终止于length - 1 ,它终止于length大多数迭代for循环应该是以下forms:

 for (int i = 0; i < array.length; i++) { // access array[i]; } 

它与字符串相同。

也许更清洁的方式是:

 String inputString; // get user input String outputString = ""; for (int i = 0; i < inputString.length; i++) { c = inputString.charAt(i); outputString += Character.isUpperCase(c) ? c + " " : ""; } System.out.println(outputString); 

编辑:忘记String不实现Iterable ,愚蠢的Java。

使用Java 8,您还可以使用lambdas。 将String转换为IntStream ,使用filter仅获取大写字符,并通过将过滤后的字符附加到StringBuilder来创建新的String

 Scanner in = new Scanner(System.in); System.out.print("Please give a string: "); //Uppercase String isUp = in.next() .chars() .filter((c) -> Character.isUpperCase(c)) .collect(StringBuilder::new, // supplier StringBuilder::appendCodePoint, // accumulator StringBuilder::append) // combiner .toString(); System.out.println("The uppercase characters are " + isUp); //Uppercase 

灵感来自:

  • Adam Bien – Streaming A String
  • IntStream作为String打印的最简单方法

尝试这个…

方法:

 public int findUpperChar(String valitateStr) { for (int i = valitateStr.length() - 1; i >= 0; i--) { if (Character.isUpperCase(valitateStr.charAt(i))) { return i; } } return -1; } 

用法:

 String passwordStr = password.getText().toString(); ....... int len = findUpperChar(passwordStr); if ( len != -1) { capitals exist. } else { no capitals exist. } 

您好,在给定字符串中找到大写字符的简单步骤之一…

程序

 import java.io.*; public class testUpper { public static void main(String args[]) throws IOException { String data,answer=""; BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); System.out.println("Enter any String : "); data=br.readLine(); char[] findupper=data.toCharArray(); for(int i=0;i=65&&findupper[i]<=91) //ascii value in between 65 and 91 is A to Z { answer+=findupper[i]; //adding only uppercase } } System.out.println("Answer : "+answer); } } 

产量

输入任何字符串:

欢迎来到String WoRlD

答:WTHSWRD

您可以在此处提高代码的可读性,并从现代Java的其他一些function中受益。 请使用Stream方法来解决此问题。 另外,我建议将最少数量的库导入您的课程。 导入时请避免使用。*。

 import java.util.Scanner; public class P43 { public static void main(String[] args) { Scanner in = new Scanner(System.in); System.out.print("Please give a string: "); String x = in.next(); x.chars().filter(c -> Character.isUpperCase(c)) .forEach(c -> System.out.print((char) c + " ")); } } 

样本输入:

saveChangesInTheEditor

样本输出:

引用

 public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("Enter the number"); String str= input.nextLine(); int ascii; for(int i=0; i= 65 && ascii <= 90) { System.out.println("captal letter found ::: "+ascii); } } } 
 public class Cama { public static void main(String[] args) { String camal = "getStudentByName"; String temp = ""; for (int i = 0; i < camal.length(); i++) { if (Character.isUpperCase(camal.charAt(i))) { System.out.print(" " + Character.toLowerCase(camal.charAt(i))); } else if (i == 0) { System.out.print(Character.toUpperCase(camal.charAt(i))); }else{ System.out.print(camal.charAt(i)); } } } }