0

Java エキスパートはあなたの助けを必要としています。

今日、あるインタビューでこの質問をされましたが、解決できませんでした。したがって、これをどのように解決すればよいかについての解決策が必要です。

文字列を逆にする

Input  : Hello, World!
Output : olleH, dlroW!

この場合、英数字が逆になり、休符は同じ場所に残ります。つまり、コンマと感嘆符は同じ場所に残ります。

答えを得るために利用できる文字列関数は 4 つだけです。

  1. charAt(c)
  2. 長さ()
  3. setCharAt(i,c)
  4. boolean isAlphaNumeric()

次のコードを試しました。

public void String(String str){     
    String temp;

    for(int i=str.length-1;i>=0;i--){
        temp = temp + str.charAt(i);
    }
}

しかし、上記のコードは文字列全体を逆にします。

4

4 に答える 4

2
public String reverseString(String str){     
        String temp = "", result = "";
        for(int i=0;i<str.length();i++)
            if ( (str.charAt(i)>='A' && str.charAt(i)<='Z')
                || (str.charAt(i)>='a' && str.charAt(i)<='z')
                || (str.charAt(i)>='0' && str.charAt(i)<='9') )
                temp = str.charAt(i) + temp;
            else {
                result += temp + str.charAt(i);
                temp = "";
            }

        result += temp;
        System.out.println(result);
        return result;
    }
于 2013-11-02T00:38:55.417 に答える
0

String は不変であるため、setCharAt は文字列関数ではありませんが、char 配列または StringBuilder (char 配列をラップするだけ) のいずれかを使用してこれを行うことができます。isAlphaNumeric はどこでも見つけることができる標準的な方法ではありませんが、 Character.isAlphabetic はあなたが望むものだと思います。これは、あなたの制限に従うことができる限り近いものを使用しています:

private static CharSequence reverseWords( CharSequence in )
{
    StringBuilder sb = new StringBuilder( in );
    for( int i = 0, len = sb.length(); i < len; i++ )
    {
        if( Character.isAlphabetic( sb.charAt( i ) ) )
        {
            int end = i;
            while( ++end < len && Character.isAlphabetic( sb.charAt( end ) ) );
            int j = end - 1;
            while( j > i )
            {
                char temp = sb.charAt( i );
                sb.setCharAt( i++, sb.charAt( j ) );
                sb.setCharAt( j--, temp );
            }
            i = end;
        }
    }
    return sb;
}

ただし、StringBuilder を使用せずに char 配列を直接使用する場合:

private static String reverseWords( String in )
{
    char[] chars = in.toCharArray();
    for( int i = 0, len = chars.length; i < len; i++ )
    {
        if( Character.isAlphabetic( chars[i] ) )
        {
            int end = i;
            while( ++end < len && Character.isAlphabetic( chars[end] ) );
            int j = end - 1;
            while( j > i )
            {
                char temp = chars[i];
                chars[i++] = chars[j];
                chars[j--] = temp;
            }
            i = end;
        }
    }
    return String.valueOf( chars );
}
于 2013-11-02T01:16:40.640 に答える