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 );
}