如何从我的file.txt读取输入(字母,数字),其中它无限读取但只在遇到特殊符号时停止?同时它是数字,即
123,345,abc
它应该翻译ascii代码并添加2个值,结果为123 + 345 = 468
已编辑的问题
这是我的代码;我在file.txt中读取这些字节时遇到了问题。我想将其值转换为我在file.txt
中添加它的值public class .... {
static char tmp = 0;
public static void main(String[] args) {
try {
Reader myReader = new FileReader("MyFolder/myFile2.txt");
List<Character> myList = new ArrayList<Character>();
/*for(int myData = myInputStream.read();
myData != -1;
myData = myInputStream.read()){
System.out.print(" " + (char)myData);
}*/
for(int myData = myReader.read();
myData != -1;
myData = myReader.read()){
if((char)myData != ','){
myList.add((char)myData);
}
else{
continue;
}
}
for(Character i: myList)
{
tmp = 1;
}
String myString = String.valueOf(tmp);
int num1 = Integer.parseInt(myString);
int num2 = Integer.parseInt(myString);
int equal = num1 + num2;
System.out.print(equal);
myReader.close();
}
catch(FileNotFoundException e){
}
catch(IOException e){
}
}
}
答案 0 :(得分:2)
这里有一些基本的代码可以做我认为你要求的东西,建立你已经拥有的东西。
public class .... {
private static final Pattern COMMA = Pattern.compile(",");
public static void main(String[] args) {
try {
BufferedReader myReader =
new BufferedReader(new FileReader("MyFolder/myFile2.txt"));
List<Integer> myList = new ArrayList<Integer>();
int total = 0;
String line;
while ((line = myReader.readLine()) != null) {
for (String token : COMMA.split(line)) {
try {
total += Integer.parseInt(token);
} catch (NumberFormatException ex) {
System.err.println(token + " is not a number");
}
}
}
System.out.print(total);
myReader.close();
} catch(FileNotFoundException e){
} catch(IOException e){
}
}
}
请注意,重新构建它会更好,因此它不是全部都在main()
中,并且异常处理不是很好,但我只是在这里寻找基础知识。
答案 1 :(得分:0)
你的工作方式太难了,而且你正在将解析逻辑与文件遍历混合在一起,这使得事情看起来比实际上更复杂:
- 遍历文件的行;
BufferedReader r = new BufferedReader(new FileReader(myFile));
String line;
while ((line=r.readLine())!=null)
{
parseLine(line)
}
- 将文件的行分解为您期望的格式。如果表单错误,请将其失败。
private void parseLine(String line)
{
try{
String[] values = line.split(",");
//do something useful assuming the line is properly formed
}
catch(Exception e)
{
//how do you want to handle badly formed lines?
}
答案 2 :(得分:-2)
您可能想查看Apache IO项目。它极大地简化了Java文件操作。
一旦你有了这个库,就可以使用
int finalnumber = 0;
LineIterator it = FileUtils.lineIterator(file, null);
while (it.hasNext()) {
List<String> segments = Arrays.asList(it.nextLine().split(","));
for (String segment : segments) {
try {
finalnumber += Integer.parseInt(segment);
} catch (NumberFormatException nfe) {
//not a number, ignore
}
}
}
LineIterator.closeQuietly(it);
System.out.println(finalnumber);
这会将所有数字加在最后一行,忽略非数字。
如果有人想要指定如何使用Apache IO执行此操作,他们可以发布它。我发现使用标准Java IO非常麻烦,我完全避免使用它。
与其他代码相比,这看起来并不简单,但Apache IO确实在幕后做了很多异常处理和细节(你可以看到,因为它是开源的)。如果这就是你想要的,那么你可以使用标准的Java IO,但是如果你想进一步使用Java IO,我仍然推荐它。