【问题标题】:Appending characters onto string将字符附加到字符串上
【发布时间】:2012-10-04 20:13:56
【问题描述】:

我正在尝试编写代码以将给定文本文件的所有字符(包括空格)导入单个字符串以进行分析。为此,我在 Java 中使用给定的文件,并在将它们放在一起时遇到了一个奇怪的错误。我根本不熟悉编码,希望得到澄清。发生的事情是在下面的代码中,当我设置

text.append(ch);

我有默认构造函数不能处理X抛出的异常,必须定义显式构造函数的错误;

当我设置 text.append('ch');

上述错误消失了,我的 'ch' 行只给出了无效的 char const。错误,可通过删除 ''s 来修复。

所以我认为我必须从 Java 为我的给定构造一个显式构造函数,这有必要吗?由于我不知道该怎么做,所以最好有一个迂回的解决方案。

import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.lang.StringBuilder;

public class TextReader //cannot place inputs/outputs of string on this line
{

StringBuilder text = new StringBuilder();
//StringBuilder google
//google end of file check java

InputStream in = new FileInputStream("charfile.txt");
Reader r = new InputStreamReader(in, "US-ASCII");
int intch;
{
while ((intch = r.read()) != -1)
{
    char ch = (char) intch;
        // ...
    text.append(ch); //if I make this a 'ch', the errors above go away, what's the problem?
}
}

}

【问题讨论】:

  • 什么?如果你有'ch',它不应该让错误消失。你能解释清楚吗?
  • 好吧,如果我将其设为“ch”,我认为 java 会专注于更明显的错误。从字面上看,当 ch 为 'ch' 时,代码中的唯一错误是 'ch' 不是有效的常量 char 的错误
  • 当我只有ch时,'InputStream in' 'Reader r' 'while(('的行都给出默认构造函数不能处理来自X的异常,请显式构造
  • 'ch' 应该会产生编译错误,因为单引号(大多数情况下)只携带一个字母。你用的是什么IDE?

标签: java file text input char


【解决方案1】:

当您执行text.append(ch); 时,此行不应出现错误。它可能会抱怨其他问题,例如未处理或抛出的预期异常,例如

已处理:

    try{
    while ((intch = r.read()) != -1){
        char ch = (char) intch;
            // ...
        text.append(ch);
    }
       }catch(IOException ioex){
          ioex.printStackTace();
       }

抛出:

使用throws 子句将您的方法声明更改为:

 public static void main(String[] args) throws IOException{

当您说text.append('ch'); 时,您的参数不再是变量或单个字符文字。 您应该在该行遇到编译错误。尽管您可以执行 text.append('c'); 之类的操作,因为 c 是单个字符。

【讨论】:

    【解决方案2】:

    您需要将语句放在代码块中,例如main 方法。

    public static void main(String[] args) throws IOException {
        StringBuilder text = new StringBuilder();
        // StringBuilder google
        // google end of file check java
    
        InputStream in = new FileInputStream("charfile.txt");
        Reader r = new InputStreamReader(in, "US-ASCII");
        int intch;
        {
            while ((intch = r.read()) != -1) {
                char ch = (char) intch;
                // ...
                text.append(ch); 
            }
        }
    }
    

    声明

    InputStream in = new FileInputStream("charfile.txt");
    Reader r = new InputStreamReader(in, "US-ASCII");
    

    两者都抛出在类块中不能发生的检查异常。

    【讨论】:

    • 呃,我想我忽略了这一点。如果我只是想将其用作从另一个俯瞰整个项目的文件中的另一个主方法调用的方法,这仍然是真的吗?
    • 不确定我是否明白您的问题,但任何会引发异常或非声明性语句的声明都应出现在代码块中。
    【解决方案3】:

    实际上java中的IO需要try和catch块,否则会报错。同样在上面的代码中,您必须将声明放在显式定义构造函数中

    TextReader()
    {
    //----------- Your Code here.
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-28
      • 1970-01-01
      • 2012-12-05
      • 2013-02-09
      • 2012-01-12
      • 1970-01-01
      • 2012-09-14
      相关资源
      最近更新 更多