web-dev-qa-db-ja.com

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はページで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
   }
}

ご意見やご協力をいただければ幸いです。

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

する必要があります

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

配列インデックスはゼロから始まることに注意してください。

文字列の長さ 戻り値

文字列内の16ビットUnicode文字の数

ループはゼロから始まったので、ループは長さ-1で終了する必要があります。

15
kosa

配列インデックスが範囲外であるのは、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を実装していません。

7
azz

Java 8では、ラムダを使用することもできます。StringIntStreamに変換し、フィルターを使用して大文字のみを取得し、フィルター処理された文字を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

触発:

5
ltlBeBoy

これを試して...

メソッド:

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

1
Praveenkumar_V

コードの可読性を高め、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

0
Vahid