当前位置: 首页 > 知识库问答 >
问题:

印刷工人在空格外换行

秦育
2023-03-14

我有一个阅读器读取一个文件进行编辑,然后用打印机保存。开始输入是这样的问题是,有时空白会被误认为是新行,就像这里一样。在第一次像这样剪完之后,我还会再剪一次

我已经尝试了一些不同的拆分字符,例如(
它实际上是什么(您可以在System.out.println中看到)),但我无法让它正常工作

最初加载的文本文件是这样的,getText的输出是这样的

if (lastClicked != 0) {
                    String path;
                    switch (lastClicked) {
                    case 1:
                        path = "data/alyxia_status.got";
                        break;
                    case 2:
                        path = "data/mog_status.got";
                        break;
                    case 3:
                        path = "data/telias_status.got";
                        break;
                    default:
                        path = "data/tiernen_status.got";
                    }
                    String text = textPane.getText();                   
                    String toWrite = text.substring(44, text.length() - 16);
                    System.out.println(toWrite);
                    String[] parts = toWrite.split("<br>");

                    FileWriter fileWriter;
                    try {
                        fileWriter = new FileWriter(path);
                        PrintWriter printWriter = new PrintWriter(fileWriter);
                        printWriter.print(parts[0]);
                        for (int i = 1; i<parts.length; i++) {  
                            if (parts[i] != "" && parts[i] != " ") {
                                printWriter.println();                              
                                printWriter.print(parts[i]);
                            }
                        }

                        printWriter.close();
                    } catch (IOException e1) {                      
                        e1.printStackTrace();
                        System.err.println("Saving failed");
                    }

                }//end if

它应该只是在字符串上分裂


共有1个答案

易昌翰
2023-03-14
匿名用户

以下代码对我来说运行良好,尝试调用 printToFile 方法并将您的字符串数组作为参数传递给 is。通过在单独的方法中隔离有问题的代码,调试应该容易得多。我还注意到您正在将 String 对象与运算符进行比较,不建议这样做,也不会执行您认为它的作用。阅读此答案以获取更多信息。

public static void printToFile(String path, String[] output) {

    FileWriter fileWriter;
    try {
        fileWriter = new FileWriter(path);
        PrintWriter printWriter = new PrintWriter(fileWriter);
        printWriter.print(output[0]);
        for (int i = 1; i < output.length; i++)
        {
            /* DO NOT compare string with opeators like "!=" or "==,
             * instead use equals method to properly compare them
             */
            if (!output[i].equals("") && !output[i].equals(" ")) {
                printWriter.println();
                printWriter.print(output[i]);
            }
        }
        printWriter.close();
    }
    catch (java.io.IOException e1) {
        e1.printStackTrace();
        System.err.println("Saving failed");
    }
}

public static void main(String[] args) throws IOException
{
    Path path = Paths.get("sample.txt");
    String[] text = new String[] { "these ", " lines ", "should", " be  ", " in   new ", "line" };

    printToFile(path.toString(), text);
    Files.readAllLines(path).forEach(System.out::println);
}

输出

these 
 lines 
should
 be  
 in   new 
line

编辑:评论中提到的@DodgyCodeException可能是你的问题的真正原因。为了便于查看,我将只粘贴注释:

文本的前 44 个字符被丢弃,因为你的 text.substring(44, text.length() - 16);。这包括“--基础”(就在“伤害”之前)的所有内容。

完全解

我在以下代码中为您的问题编写了完整的解决方案。尝试代码,看看它是否适合您,然后阅读代码下方发布的说明:

public class Main {

    /**
     * Use {@link StringBuilder} to build a single {@code String}
     * from the read contents of file located under given path.
     * 
     * @param path {@code Path} of the file to read
     * @throws IOException if an I/O error occurs reading from the file
     *         or a malformed or unmappable byte sequence is read.
     */
    private static String getInputFileContent(Path path) throws IOException {

        StringBuilder sb = new StringBuilder();
        Files.readAllLines(path).forEach(sb::append);
        return sb.toString();
    }

    /**
     * @return the matched content contained in <body> tag within
     *         the provided text or {@code null} if there was no match.
     */
    private static @Nullable String getHTMLBodyFromText(String text) {

        Pattern pattern = Pattern.compile("(?:\\s*?<body>)(?:\\s*)((.*\\s)*)</body>");
        Matcher matcher = pattern.matcher(text);
        return matcher.find() ? matcher.group(1) : null;
    }

    public static void printToFile(Path path, String output) {

        String toWrite = getHTMLBodyFromText(output);
        if (toWrite == null) {
            System.err.println("Unable to find body");
            return;
        }
        String[] parts = toWrite.split("<br>");
        FileWriter fileWriter;
        try {
            fileWriter = new FileWriter(path.toString());
            PrintWriter printWriter = new PrintWriter(fileWriter);
            printWriter.print(parts[0]);
            for (int i = 1; i < parts.length; i++)
            {
                /* DO NOT compare string with opeators like "!=" or "==,
                 * instead use equals method to properly compare them
                 */
                if (!parts[i].equals("") && !parts[i].equals(" ")) {
                    printWriter.println(parts[i]);
                    printWriter.print(parts[i]);
                }
            }
            printWriter.close();
        }
        catch (java.io.IOException e1) {
            e1.printStackTrace();
            System.err.println("Saving failed");
        }
    }
    public static void main(String[] args) throws IOException
    {
        Path inputPath = Paths.get("input.txt");
        Path outputPath = Paths.get("output.txt");

        printToFile(outputPath, getInputFileContent(inputPath));
    }
}

我使用了< code>Regex来查找< code >中包含的文本

其余代码工作正常,因此您所要做的就是调用printToFile方法并将textPane.gettext()的返回值作为输出String参数传递,它将为您处理并打印所需的结果到位于您选择的路径下的文本文件中。

 类似资料:
  • 问题内容: 在python中,如果我说 我收到字母h和换行符。如果我说 我收到字母h,没有换行符。如果我说 我得到字母h,一个空格和字母。如何防止Python打印空间? 打印语句是同一循环的不同迭代,因此我不能只使用运算符。 问题答案: 你需要致电,因为否则它将把文本保存在缓冲区中,你将看不到它。

  • 本文向大家介绍Java 替换空格,包括了Java 替换空格的使用技巧和注意事项,需要的朋友参考一下 请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 以下是java.lang.StringBuilder.replace()方法的声明 public StringBuilder replace(i

  • 题目链接 牛客网 题目描述 将一个字符串中的空格替换成 "%20"。 // text Input: "A B" Output: "A%20B" 解题思路 ① 在字符串尾部填充任意字符,使得字符串的长度等于替换之后的长度。因为一个空格要替换成三个字符(%20),所以当遍历到一个空格时,需要在尾部填充两个任意字符。 ② 令 P1 指向字符串原来的末尾位置,P2 指向字符串现在的末尾位置。P1 和

  • 问题内容: 我想用python来做 。我想在中的此示例中做什么: 在C中: 输出: 在Python中: . 在Python中print会添加或空格,如何避免呢?现在,这只是一个例子,不要告诉我可以先构建一个字符串然后再打印它。我想知道如何将字符串”append”到。 问题答案: 在Python 3中,你可以使用函数的和参数: 不在字符串末尾添加换行符: 在要打印的所有函数参数之间不添加空格: 你可

  • 我不明白如何让代码只打印奇数字而不打印偶数字。 时不时地,你想在程序中输入几个单词,然后让它们回响给你。然而,众所周知,如果你在洞穴里喊得太快,回声可能会干扰你说的新单词。更具体地说,你说的每一个其他单词都会干扰你以前单词的回声。因此,只有第一个、第三个、第五个等等,单词实际上会产生echo.emphasized文本

  • 一、题目 请实现一个函数,把字符串中的每个空格替换成"%20",例如“We are happy.”,则输出“We%20are%20happy.”。 二、解题思路 先判断字符串中空格的数量。根据数量判断该字符串有没有足够的空间替换成"%20"。 如果有足够空间,计算出需要的空间。根据最终需要的总空间,维护一个指针在最后。从后到前,遇到非空的就把该值挪到指针指向的位置,然后指针向前一位,遇到“ ”,则