java - 在特定行中附加java中的文件
问题描述
我想为 html 语言创建一些新的编译器,就像我打字时一样
<repeat it="5">
<input type="text" name="user">
</repeat>
它将重复输入行5次并将其写入文件并删除最后3行并将其替换为: 5输入 所以我的问题是当我替换这些行并将其写入文件时netbean的编译器显示给我此错误消息:
Exception in thread "AWT-EventQueue-0" java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Scanner.java:1540)
at htmleditor.editfr.boomActionPerformed(editfr.java:145)
at htmleditor.editfr.access$100(editfr.java:28)
at htmleditor.editfr$2.actionPerformed(editfr.java:72)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6539)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6304)
at java.awt.Container.processEvent(Container.java:2239)
at java.awt.Component.dispatchEventImpl(Component.java:4889)
at java.awt.Container.dispatchEventImpl(Container.java:2297)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476)
at java.awt.Container.dispatchEventImpl(Container.java:2283)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)
at java.awt.EventQueue$4.run(EventQueue.java:733)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:730)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
代码 :
private void boomActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
String p = name.getText()+".html";
int iteranum = 0;
String linetow;
String word = null;
Scanner scan = null;
try {
scan = new Scanner(new File(p));
} catch (FileNotFoundException ex) {
Logger.getLogger(editfr.class.getName()).log(Level.SEVERE, null, ex);
}
while(scan.hasNext()){
String line = scan.nextLine().toLowerCase().toString();
if(line.contains("<repeat")){
int i= line.indexOf("it=")+4;
char itera = line.charAt(i);
iteranum=Integer.parseInt(String.valueOf(itera));
}
linetow = scan.nextLine().toLowerCase().toString();
System.out.println(p);
for(int j=1;j<=iteranum;j++){
//begin
line = line.replace(line, linetow);
try {
Files.write(Paths.get(p), line.getBytes(), StandardOpenOption.APPEND);
}
catch (IOException e) {
//exception handling left as an exercise for the reader
}
//end
}
}
}
解决方案
原因是scan.nextLine()
调用后调用了两次scan.hasNext()
。
while(scan.hasNext()){
String line = scan.nextLine().toLowerCase().toString(); // next line always exists
...
linetow = scan.nextLine().toLowerCase().toString(); // next line does not always exist
因此,如果您在 html 文件中添加或删除一行,则NoSuchElementException
不会抛出。但是,您应该将代码更改为在调用scan.nextLine()
后仅调用一次scan.hasNext()
。
推荐阅读
- powershell - 从一个实例复制到另一个实例
- php - 如何使用 PHP 脚本为 FTP 服务器制作 Web UI?
- r - shinyWidgets 中未使用的参数错误:airDatepickerInput
- python-3.x - 使用 python 进行 Instagram 网页抓取
- python - 是否可以在函数中嵌入 argsparse 解析器?
- combobox - 组合框是否需要具有文本框角色的子元素?
- windows - 与 I/O 操作相关的 sys 包问题
- python - 在 pyinstaller 中找不到模块
- android-espresso - 如何在 Kotlin Flow 中使用 Espresso?
- lisp - 打印输入数字的总和