import java.io.*;
import java.util.Scanner;
class FileReverse{
public static void main(String[] args) throws IOException{
//charAt(int index): Returns the char value at the specified index.
//substring(int beginindex, int endindex): Returns a new string that is a substring of the string.
//valueOf(char c): Returns the string representation of the char argument
Scanner in = null;
PrintWriter out = null;
String line = null;
String[] token = null;
int i ,n ;
// check number of command line arguments is at least 2
if(args.length < 2){
System.out.println("Usage: FileCopy <input file> <output file>");
System.exit(1);
}
// open files
in = new Scanner(new File(args[0]));
out = new PrintWriter(new FileWriter(args[1]));
// read lines from in, extract and print tokens from each line
while( in.hasNextLine() ){
// trim leading and trailing spaces, then add one trailing space so
// split works on blank lines
line = in.nextLine().trim() + " ";
// split line around white space
token = line.split("\\s+");
// reverses the input and prints it to the console.
n = token.length;
for(i=0; i<n; i++){
stringReverse(token[i],(n-1));
System.out.println(token);
}
}
// close files
in.close();
out.close();
}
public static String stringReverse(String s, int n){
if(n == 0){
return s.charAt(0) + "";
}
char let = s.charAt(n);
return let + stringReverse(s,(n-1));
}
}
我们获得了一个带有此输入的文件
abc defg 嗨
jkl mnop q
rstu v wxyz
并且必须以
的形式返回 CBA
GFED
IH
LKJ
ponm
q
utsr
v
zyxw
我的代码编译但我不断得到indexoutofboundsexception,我无法解决这个问题。非常感谢帮助!
答案 0 :(得分:1)
您在每个空格处拆分String
。在以下代码中
n = token.length;
for(i=0; i<n; i++){
stringReverse(token[i],(n-1));
System.out.println(token);
}
检查空格分隔的元素数量。但是您所犯的错误是,您正在将n-1
解析为函数Stringreverse
(除了您不存储返回值的事实)。您正在使用第二个参数作为length
的{{1}},但您目前正在做的是,
你传递了在用空格分割初始String
后返回的数组元素的数量。你应该把它称为:
String
答案 1 :(得分:0)
替换
for(i=0; i<n; i++){
stringReverse(token[i],(n-1));
System.out.println(token);
}
这
for(i=0; i<n; i++){
token[i]= stringReverse(token[i],token[i].length()-1);
System.out.println(token[i]);
}
您必须将每个字符串大小(不是采用的数组大小)传递给stringReverse方法。
我不确定你为什么在for循环中使用以下代码
System.out.println(token);