我有3个文件,“ MyFile”,“ myOtherFile”,“ yetAnotherFile”,我的代码将从这些文件中提取单词并将其放入数组中,检查它们是否以大写字母开头,如果确实以大写字母开头,还将按字母顺序对它们进行排序。 所有3个单词都包含3个或更多单词,一个单词只有一个以小写字母开头的单词,因此我可以测试无效的输入打印行
我莫名其妙地让所有3个人打印无效行
添加了一个计数器,因此如果counter> 0则执行打印语句
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.*;
public class StringSorter {
private String inputFileName;
//private String line;
public StringSorter(String fileName) {
inputFileName = fileName;
}
public void sortStrings() throws IOException {
FileReader input = new FileReader(inputFileName);
BufferedReader myReader = new BufferedReader(input);
String line, data = "";
String[] words;
int posCount = 0;
while ((line = myReader.readLine()) != null)
data += line;
words = data.split(",");
for(int posi = 0; posi < words.length; posi++) {
if(!Character.isUpperCase(words[posi].charAt(0))) {
posCount++;
}
}
if(posCount > 0) {
System.out.print("Invalid input. Word found which does not start with an uppercase letter.");
}
else {
for (int k = 0; k < words.length; k++) {
for (int i = k - 1; i >= 0; i--) {
if (words[i].charAt(0) < words[k].charAt(0)) {
String temp = words[k];
words[k] = words[i];
words[i] = temp;
k = i;
}
}
}
for(int print = 0; print < words.length - 1; print++){
System.out.print(words[print].trim() + ", ");
}
System.out.print(words[words.length-1]);
}
input.close();
myReader.close();
}
}
import java.io.*;
public class TestStringSorter {
public static void main(String[] args) throws IOException {
StringSorter sorterA = new StringSorter("MyFile.txt");
sorterA.sortStrings();
StringSorter sorterB = new StringSorter("myOtherFile.txt");
sorterB.sortStrings();
StringSorter sorterC = new StringSorter("yetAnotherFile.txt");
sorterC.sortStrings();
}
}
Invalid input. Word found which does not start with an uppercase letter.
无效的输入。找到不以大写字母开头的单词。 输入无效。找到不以大写字母开头的单词。
答案 0 :(得分:1)
我知道可能是什么问题。您正在对','进行分割,但是逗号后有空格。因此,您将拥有一个像“狗”之类的“单词”,并且如果您测试该单词的第一个字符,那么您将会失败,因为空格不是大写字母。
尝试分裂:
words = data.split("[,\\s]+");
这将解决数据中的空格问题。
我看到另一个问题,可能会导致您无法获得预期的结果。您是将多行连接在一起,但没有在行之间放置任何内容,因此,一行上的最后一个单词将与下一行中的第一个单词合并。将它们串联在一起时,您可能希望在每行之间放置一个“,”。
我想您想编写自己的排序。我将其留给您或其他人进行调试。但是你可以:
Arrays.sort(words)
答案 1 :(得分:0)
也许您在每个单词前都加了一个空格,这就是您要检查的是否大写...