while循环的双字符串输出
Double string output from while loop
我正在尝试编写一个简单的 Class 代码来根据列表将一些确定的文件(照片)从一个文件夹复制到另一个文件夹。该列表保存在单独的 txt 文件中。
最后我遇到了找不到文件的错误,所以我将整个代码分成几部分并用控制台输出测试了每一部分。
那就是我在扫描器 while 循环中发现的:
所以代码:
import java.io.File;
import java.util.Scanner;
import java.io.FileNotFoundException;
public class Sandy2 {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
File f = new File("D:\\Javasorter\List.txt");
Scanner in;
in = new Scanner(f).useDelimiter("[?! .,;:\t\r\n\f\'\"]");
String word, pathbuf1, pathbuf2;
while (in.hasNext()) {
word = in.next().toLowerCase();
System.out.println(word);
Thread.sleep(1000);
pathbuf1 = "\IMG_" + word + ".CR2";
pathbuf2 = "\IMG_" + word + ".CR2";
System.out.println(pathbuf1);
System.out.println(pathbuf2);
}
}
}
预期输出:
9452
\IMG_9452.CR2
\IMG_9452.CR2
9475
\IMG_9475.CR2
\IMG_9475.CR2
依此类推,直到列表有下一个,但是
输出:
9452
\IMG_9452.CR2
\IMG_9452.CR2
\IMG_.CR2
\IMG_.CR2
9475 \IMG_9475.CR2
\IMG_9475.CR2
\IMG_.CR2
\IMG_.CR2
等等///
完整版程序在同一个循环中添加了复制命令,其中“\IMG_9452.CR2”附加到路径srting
因此,在复制第一个文件后出现错误,因为当然没有 "IMG_.CR2" 文件。
有人知道为什么 \IMG_.CR2 在每次循环迭代中加倍吗?
非常感谢!
完全删除变量pathbuf2
,您将不会再有任何重复项
你的问题出在.useDelimiter("[?! .,;:\t\r\n\f\'\"]")
,因为Scanner
会将行与行之间的空格读取为字符串对象,所以你必须删除它或更改它,如果你仍然需要使用Delimiter
.
另外,文件路径可以用正斜杠写/
这样可读性更好,OS独立,尽量使用try-with-resource
防止源码泄露。
考虑这段代码:
public static void main(String[] args) throws Exception {
try (Scanner in = new Scanner(new File("D:/Javasorter/List.txt"))) {
// in.useDelimiter("[?! .,;:\t\r\n\f\'\"]");
String word, pathbuf1, pathbuf2;
while (in.hasNext()) {
word = in.next().toLowerCase();
System.out.println(word);
Thread.sleep(1000);
pathbuf1 = "\IMG_" + word + ".CR2";
pathbuf2 = "\IMG_" + word + ".CR2";
System.out.println(pathbuf1);
System.out.println(pathbuf2);
}
}
}
如果你想在某些情况下使用Delimiter
,你可以使用字符串trim然后检查字符串是否为空,如:
public static void main(String[] args) throws Exception {
try (Scanner in = new Scanner(new File("D:/Javasorter/List.txt"))) {
in.useDelimiter("[?! .,;:\t\r\n\f\'\"]");
String word, pathbuf1, pathbuf2;
while (in.hasNext()) {
word = in.next().trim().toLowerCase();
if (!word.isEmpty()) {
System.out.println(word);
Thread.sleep(1000);
pathbuf1 = "\IMG_" + word + ".CR2";
pathbuf2 = "\IMG_" + word + ".CR2";
System.out.println(pathbuf1);
System.out.println(pathbuf2);
}
}
}
}
我正在尝试编写一个简单的 Class 代码来根据列表将一些确定的文件(照片)从一个文件夹复制到另一个文件夹。该列表保存在单独的 txt 文件中。
最后我遇到了找不到文件的错误,所以我将整个代码分成几部分并用控制台输出测试了每一部分。 那就是我在扫描器 while 循环中发现的: 所以代码:
import java.io.File;
import java.util.Scanner;
import java.io.FileNotFoundException;
public class Sandy2 {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
File f = new File("D:\\Javasorter\List.txt");
Scanner in;
in = new Scanner(f).useDelimiter("[?! .,;:\t\r\n\f\'\"]");
String word, pathbuf1, pathbuf2;
while (in.hasNext()) {
word = in.next().toLowerCase();
System.out.println(word);
Thread.sleep(1000);
pathbuf1 = "\IMG_" + word + ".CR2";
pathbuf2 = "\IMG_" + word + ".CR2";
System.out.println(pathbuf1);
System.out.println(pathbuf2);
}
}
}
预期输出:
9452
\IMG_9452.CR2
\IMG_9452.CR2
9475
\IMG_9475.CR2
\IMG_9475.CR2
依此类推,直到列表有下一个,但是
输出:
9452
\IMG_9452.CR2
\IMG_9452.CR2
\IMG_.CR2
\IMG_.CR2
9475 \IMG_9475.CR2
\IMG_9475.CR2
\IMG_.CR2
\IMG_.CR2
等等/// 完整版程序在同一个循环中添加了复制命令,其中“\IMG_9452.CR2”附加到路径srting
因此,在复制第一个文件后出现错误,因为当然没有 "IMG_.CR2" 文件。
有人知道为什么 \IMG_.CR2 在每次循环迭代中加倍吗? 非常感谢!
完全删除变量pathbuf2
,您将不会再有任何重复项
你的问题出在.useDelimiter("[?! .,;:\t\r\n\f\'\"]")
,因为Scanner
会将行与行之间的空格读取为字符串对象,所以你必须删除它或更改它,如果你仍然需要使用Delimiter
.
另外,文件路径可以用正斜杠写/
这样可读性更好,OS独立,尽量使用try-with-resource
防止源码泄露。
考虑这段代码:
public static void main(String[] args) throws Exception {
try (Scanner in = new Scanner(new File("D:/Javasorter/List.txt"))) {
// in.useDelimiter("[?! .,;:\t\r\n\f\'\"]");
String word, pathbuf1, pathbuf2;
while (in.hasNext()) {
word = in.next().toLowerCase();
System.out.println(word);
Thread.sleep(1000);
pathbuf1 = "\IMG_" + word + ".CR2";
pathbuf2 = "\IMG_" + word + ".CR2";
System.out.println(pathbuf1);
System.out.println(pathbuf2);
}
}
}
如果你想在某些情况下使用Delimiter
,你可以使用字符串trim然后检查字符串是否为空,如:
public static void main(String[] args) throws Exception {
try (Scanner in = new Scanner(new File("D:/Javasorter/List.txt"))) {
in.useDelimiter("[?! .,;:\t\r\n\f\'\"]");
String word, pathbuf1, pathbuf2;
while (in.hasNext()) {
word = in.next().trim().toLowerCase();
if (!word.isEmpty()) {
System.out.println(word);
Thread.sleep(1000);
pathbuf1 = "\IMG_" + word + ".CR2";
pathbuf2 = "\IMG_" + word + ".CR2";
System.out.println(pathbuf1);
System.out.println(pathbuf2);
}
}
}
}