这是对我解决我的一个程序的许多问题的回应。所以现在,我正在尝试计算输入的文本文件中的元音数量,然后将其输出回文本文件。但是,在这种情况下,我还需要将文本文件中的任何空格更改为代字号/ tilda(〜)。如果您查看大量if语句块之后的行,则会有一个if语句说明该字符是否为空格,然后将其更改为波浪号。
我知道字符串是不可变的,所以这就是为什么我不确定如何改变它。我真的不想要一个新的字符串...但这可能是我唯一的选择。
//Name: Allen Li
//Program file: Vowels.Java
//Purpose: Using File IO, read a file's input and output this text to a new text file
//When outputting, all blank spaces will be changed to tildes and there will be a count of each vowel(AEIOU)
import java.util.Scanner; //input
import java.io.File; //IO
import java.io.IOException; //IO exception class
import java.io.FileWriter; //file output
import java.io.FileReader; //file input
import java.io.FileNotFoundException; //if file isnt found, file not found class
public class Vowels { //class
public static void main(String[] args) { //main method
try { //try block
FileReader poetry = new FileReader("poetry.txt");
FileWriter dentist = new FileWriter(
"LI_ALLEN_dentist.txt");
int a;
while ((a = poetry.read()) != -1) {
dentist.write(a);
System.out.print((char) a); //print the file to the monitor
}
poetry.close();
dentist.close();
Scanner inFile = new Scanner(new File(
"LI_ALLEN_dentist.txt"));
int numOfVowelsA = 0; //count #s of A/E/I/O/U vowels
int numOfVowelsE = 0;
int numOfVowelsI = 0;
int numOfVowelsO = 0;
int numOfVowelsU = 0;
while (inFile.hasNext()) {
String sentence = inFile.next();
for (int i = 0; i <= sentence.length() - 1; i++) {
if (sentence.toLowerCase().charAt(i) == 'a') {
numOfVowelsA++;
}
if (sentence.toLowerCase().charAt(i) == 'e') {
numOfVowelsE++;
}
if (sentence.toLowerCase().charAt(i) == 'i') {
numOfVowelsI++;
}
if (sentence.toLowerCase().charAt(i) == 'o') {
numOfVowelsO++;
}
if (sentence.toLowerCase().charAt(i) == 'u') {
numOfVowelsU++;
}
if (sentence.toLowerCase().charAt(i) == ' '){
}
}
System.out.println("The number of A vowels is: " + numOfVowelsA);
System.out.println("The number of E vowels is: " + numOfVowelsE);
System.out.println("The number of I vowels is: " + numOfVowelsI);
System.out.println("The number of O vowels is: " + numOfVowelsO);
System.out.println("The number of U vowels is: " + numOfVowelsU);
}
} catch (FileNotFoundException i) {
System.out.println("The file you are trying to use as input is not found. " + i);
} catch (IOException i) {
System.out.println("There is an issue with the input or output file. " + i);
}
}
}
答案 0 :(得分:2)
String modified_sentence = sentence.replaceAll(" ", "~");
然后继续“modified_sentence”
for (int i = 0; i <= modified_sentence.length() - 1; i++) {
if (modified_sentence.toLowerCase().charAt(i) == 'a') {
numOfVowelsA++;
// continue
修改强>
继续写入同一个文件,你必须在这样的附加模式下打开它
FileWriter dentist = new FileWriter(
"LI_ALLEN_dentist.txt",true); // notice the true at the end
答案 1 :(得分:1)
我知道字符串是不可变的,所以这就是为什么我不确定如何 更改。我真的不想要一个新的字符串...但那可能是我的 唯一的选择。
嗯,这听起来像是你唯一的选择。无论你采取什么方法,如果给你一个固定的基本字符串,你需要以某种方式改变它(通过正则表达式,StringBuilder
,replaceAll
,w / e)你'最后会得到一个新的字符串。
我认为这里最好的方法是使用StringBuilder
。特别是如果你正在阅读文件。