したがって、ユーザーが入力した文字列内のすべての大文字を検索しようとしていますが、このランタイムエラーが発生し続けます。
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はページでcharAtについてさえ話します Java.lang.StringIndexOutOfBoundsException
大文字を見つけて印刷するための私のコードは次のとおりです。
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++){
配列インデックスはゼロから始まることに注意してください。
文字列の長さ 戻り値
文字列内の16ビットUnicode文字の数
ループはゼロから始まったので、ループは長さ-1で終了する必要があります。
配列インデックスが範囲外であるのは、forループがlength - 1
で終了しておらず、length
で終了しているためです。ほとんどのforループの反復は次の形式である必要があります。
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<Character>
、ばかげたJavaを実装していません。
Java 8では、ラムダを使用することもできます。String
をIntStream
に変換し、フィルターを使用して大文字のみを取得し、フィルター処理された文字をString
に追加して新しいStringBuilder
を作成します。
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
触発:
これを試して...
メソッド:
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.
}
こんにちは、指定された文字列で大文字の文字を見つける簡単な手順の1つです...
プログラム
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<findupper.length;i++)
{
if(findupper[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);
}
}
出力
任意の文字列を入力してください:
StringWoRlDへようこそ
回答:WTHSWRD
コードの可読性を高め、modern Java here。この問題を解決するには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
サンプル出力:
C I T E