我在文本文件中有以下数据
5
this is a test
foobar
all your base
class
pony along
这里第一个数字表示输入中的行数。遵循数据线。在这里,我想颠倒一句话。
Eg:
this is a test
反转为
test a is this
当我运行以下代码时
String input = "This is interview question.";
String output = "";
String[] array = input.split(" ");
for(int i = array.length-1; i >= 0; i--)
{
output =output+ array[i];
if (i != 0)
{
output =output+ " ";
}
}
System.out.println(output);
我得到了正确的输出,但是当从文件中读取时,它是另一回事。
我正在使用以下代码查看文本文件中的数据。
import java.io.File;
import java.util.ArrayList;
import java.util.Scanner;
public class Dummy {
public static void main(String args[]) throws Exception {
// Scanner s = new Scanner(new File("D:/GC/Store Credit/A-small.in"));
Scanner s = new Scanner(new File("D:/GC/Reverse/B-small.in"));
while (s.hasNextLine()){
System.out.println(s.nextLine());
}
s.close();
}
}
并按照我的文本文件提供输出。
同样当我尝试使用条件来运行上面的代码来反转字符串时,它会给我一个错误的输出
我使用的代码是
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;
public class RevSent {
public static void main(String[] args) throws Exception {
File file=new File("D:/GC/Reverse/B-Small.txt");
FileWriter fw=new FileWriter(file);
BufferedWriter bw=new BufferedWriter(fw);
Scanner sc=new Scanner(new File("D:/GC/Reverse/B-small.in"));
int testCaseCount = Integer.parseInt(sc.next());
System.out.println("Test cases are:"+testCaseCount);
for(int i=0;i<testCaseCount;i++)
{
while (sc.hasNextLine()){
String input=sc.nextLine();
System.out.println(input);
String output="";
String[] array=input.split(" ");
for(int j=array.length-1;j>0;j--){
output+=array[j];
}
System.out.println(output);
}
}
sc.close();
}
}
,我得到的输出是
Test cases are:5
this is a test
testais
foobar
all your base
baseyour
class
pony along
along
请告诉我哪里出错了。谢谢你我所做的改变和代码工作正常,但我遇到了另一种情况,我要在结果之前添加案例编号(测试案例编号),但在我的代码中,案例编号仍然是只有1.代码如下。
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;
public class RevSent {
public static void main(String[] args) throws Exception {
File file=new File("D:/GC/Reverse/B-Small.txt");
FileWriter fw=new FileWriter(file);
BufferedWriter bw=new BufferedWriter(fw);
Scanner sc=new Scanner(new File("D:/GC/Reverse/B-small.in"));
int testCaseCount = Integer.parseInt(sc.next());
// System.out.println("Test cases are:"+testCaseCount);
for(int i=0;i<testCaseCount;i++)
{
String output="";
String input=sc.nextLine();
String[] array=input.split(" ");
for(int j=array.length-1;j>=0;j--){
output+=array[j]+" ";
}
bw.write("Case #" + (i+1) + ": " + output + "\r\n");
System.out.println("Case #" + (i+1) + output+"\r\n");
}
bw.close();
sc.close();
}
}
,输出如下,并且还有一个没有结果的额外情况。
Case #1
Case #2test a is this
Case #3foobar
Case #4base your all
Case #5class
由于
答案 0 :(得分:3)
编辑更新了最新代码。请尝试以下方法:
public static void main(String[] args) throws Exception {
File file = new File("D:/GC/Reverse/B-Small.txt");
FileWriter fw = new FileWriter(file);
BufferedWriter bw = new BufferedWriter(fw);
Scanner sc = new Scanner(new File("D:/GC/Reverse/B-small.in"));
int testCaseCount = Integer.parseInt(sc.next());
//System.out.println("Test cases are:"+testCaseCount);
int i = 0;
while (sc.hasNextLine()) {
String input = sc.nextLine();
//System.out.println(input);
String output = "";
String[] array = input.split(" ");
for (int j = array.length - 1; j >= 0; j--) {
output += array[j] + " ";
}
if (!"".equals(output)){
bw.write("Case #" + (i + 1) + ": " + output.trim() + "\r\n");
}
}
bw.close();
sc.close();
}
答案 1 :(得分:2)
第二个代码段中for循环的条件是错误的。它应该是:
for(int j=array.length-1; j >= 0; j--) {
您还必须在输出中附加一个空白:
output += array[j] + " ";
我还建议使用StringBuilder
来汇编输出字符串。
答案 2 :(得分:2)
这是你的固定程序。
您的主要问题是:
1)for循环内嵌套的while循环
2)你没有在单词之间追加空格
作为旁注,有一个很好的算法 将O(N)中的句子的单词反转到位 Reverse the ordering of words in a string
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.util.Scanner;
public class RevSent {
public static void main(String[] args) throws Exception {
File file = new File("D:/GC/Reverse/B-Small.txt");
FileWriter fw = new FileWriter(file);
BufferedWriter bw = new BufferedWriter(fw);
Scanner sc = new Scanner(new File("D:/GC/Reverse/B-small.in"));
int testCaseCount = Integer.parseInt(sc.nextLine());
System.out.println("Test cases are:" + testCaseCount);
for (int i = 0; i < testCaseCount; i++) {
String input = sc.nextLine();
System.out.println(input);
String output = "";
String[] array = input.split(" ");
for (int j = array.length - 1; j >= 1; j--) {
output += array[j] + " ";
}
output += array[0];
System.out.println(output);
bw.write(output);
}
sc.close();
bw.close();
}
}