java - java中字符串有空格时无法获取整个字符串

标签 java string swing

我对java还是个新手,所以愚蠢的问题来了。我一直在开发一个简单的软件,使用 JFramePrintWriterFileScanner 来创建和读取一个文本文件,我使用您输入的名称保存该文件,然后使用您输入到 JTextField 的数据保存该文件,问题是:只要您输入一个空格,它就不会保存之后的文本.txt 文件的空间:

输入

waitFor it

   WriteToFile(textarea.getText(), name.getText());
// my function   input text         name

输出:

waitFor

但是如果我这样手动输入文本:

   WriteToFile("waitFor it", name.getText());
// my function   input text         name

输出:

waitFor it

这让我认为我的功能可能不会导致这种情况,但我又是一个菜鸟。

Main.java

package creator;

import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextField;


import library.Database;

public class Main extends Database{

    public static void main(String[] args) {

        JFrame frame = new JFrame();

        JButton button = new JButton("Erase");
        JButton button2 = new JButton("Add");
        JButton button3 = new JButton("Save to Database");

        Font font = new Font("Courier", Font.BOLD, 12);
        Font font2 = new Font("Courier", Font.BOLD, 14);

        final JTextField name = new JTextField();
        final JTextField editorPane = new JTextField();
        final JTextField textarea = new JTextField();

        final JScrollPane scroll = new JScrollPane (textarea, 
        JScrollPane.VERTICAL_SCROLLBAR_NEVER, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);

        frame.setTitle("Array Creator");
        frame.setSize(401, 250);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);
        frame.setResizable(false);
        frame.setLayout(null);

        frame.add(button);
        frame.add(name);
        frame.add(button2);
        frame.add(button3);
        frame.add(editorPane);
        frame.add(scroll);

        button.setBounds(0, 200, 80, 22);
        name.setBounds(82, 200, 80, 22);
        button2.setBounds(164, 200, 80, 22);
        button3.setBounds(246, 200, 148, 22);
        editorPane.setBounds(100,175,200,18);
        scroll.setBounds(50, 10, 300, 160);
        textarea.setEditable(false);

        button.setFont(font);
        name.setFont(font); 
        button2.setFont(font);
        button3.setFont(font); 
        editorPane.setFont(font);
        textarea.setFont(font2);

        textarea.setText("[");

        frame.setVisible(true);

        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                textarea.setText("[");
                editorPane.setText("");
            }
        });
        button2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                textarea.setText(textarea.getText()+"["+editorPane.getText()+"],");
                editorPane.setText("");
            }
        });
        button3.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                String temp = textarea.getText();
                temp = temp.substring(0, temp.length()-1);
                textarea.setText(temp+"]");
                editorPane.setText("");
                WriteToFile(textarea.getText(), name.getText());
            }
        });
        name.addKeyListener(new KeyListener() {
            public void keyTyped(KeyEvent arg0) {
            }

            public void keyReleased(KeyEvent arg0) {
                textarea.setText(readFile(name.getText()));
            }

            public void keyPressed(KeyEvent arg0) { 
            }
        });

    }

}

Database.java

package library;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.util.Scanner;

public class Database {

    public static String WriteToFile(String data, String name){
        String output = "ERROR";
        PrintWriter writer = null;
        try {
            writer = new PrintWriter(name+".txt", "UTF-8");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        writer.println(data);
        writer.close();

        File file = new File(name+".txt");
        try {
            @SuppressWarnings("resource")
            Scanner sc = new Scanner(file);
            output = sc.next();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        return output;
    }

    public static String readFile(String name){
        String output = "[";
        File file = new File(name+".txt");
        try {
            @SuppressWarnings("resource")
            Scanner sc = new Scanner(file);
            output = sc.next();
        } catch (FileNotFoundException e) {

        }

        return output;
    }

}

有人可以向我解释一下这是为什么吗?

最佳答案

相反

output = sc.next(); 

使用

output = sc.nextLine();

引用: Scanner#next() vs Scanner#nextLine()

关于java - java中字符串有空格时无法获取整个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35479451/

相关文章:

java - 启动时出现Grails应用程序错误

java - 从 Java 中的 Mule 对象存储中检索源代码

java - 如何隐藏 Mac/OSX 拖放 JTable 选择框

java - JTable 最小化时更新时 CPU 使用率高

java - 在不写入磁盘的情况下显示在 MySQL 中存储为 BLOB 的图像

java - 从文件中获取信息并解析以获取方程

java - 将一个字符串分成三个 block ?

c - 寻找更好的算法来插入 C 风格字符串 (char *)

c# - 为 RichTextBox 字符串的不同部分着色

java - 用于 Java Swing 应用程序的 UI 自动化工具,具有记录和回放以及屏幕捕获功能