1

我有一个存储了四个字符的 char 数组,我需要在 char 数组中添加一个整数,然后将 .txt 添加到 if 的末尾,然后将整个内容渲染为字符串,以便我可以使用它来创建文件对象. 但是当我运行整个过程时它不起作用。使用 println 输出每一步发生的事情,它向我显示存储在 char 数组中的数字正在打印为字符串,如下所示:( 0001 ) 而不仅仅是这个 (1)。为什么会这样,我该如何解决?我在这里输入了一段简短的代码来演示这个问题。下面的 printline 语句的输出是: temp 0001 .txt 而不是 temp1.txt 这是我想要得到的。谢谢你尽你所能的帮助。

public class Test {
  public static void main(String[] args) {
  int count = 4;
  char[] temp = new char[count + 5];
  char[] base = new char[] {'t', 'e', 'm', 'p'};

  char[] extension = new char[] {'.', 't', 'x', 't'};
  for (int i = 0; i < 4; i++)
     temp[i] = base[i];

  temp[count] = (char)1;
  for (int k = 0; k < 4; k++)
     temp[count + 1 + k] = extension[k];

  String file = new String(temp);

  System.out.println(file);

  }
}
4

4 回答 4

2

您无需为字符数组处理所有麻烦。Java 使用String为您完成了大部分工作。试试这个更简单的代码,创建 10 个文件名。我认为您正在尝试创建许多具有相同基本名称的编号名称的文件。

public class Test {
  public static void main(String[] args) {
    String baseName = "temp";
    String extension = ".txt";
    
    // create 10 file names
    for(int i=0; i<10; i++) {
      String newName = baseName + (i+1) + extension;
      System.out.println(newName);
    }
  }
}

注意周围的括号i+1。没有括号,i并且1单独转换为字符串,然后连接到字符串。例如,如果i5,那么没有括号,这给出51,而有括号你得到6

奖励0:您可以像这样用 s填充数字部分:

String newName = baseName + String.format("%04d", i+1) + extension;

这样,如果长度小于 4,编号部分将用零填充以使长度为 4。但是,如果长度为 4 或大于 4,则不会删除数字。

例如:45成为004512345停留12345

于 2016-02-17T02:48:09.143 回答
1

这将插入带有值1而不是字符 1 的字符。

emp[count] = (char)1;

试试这个:

emp[count] = '1';

编辑:如果你想要更动态

int i = ...
emp[count] = (char) ('0'+ i);
于 2016-02-17T02:30:41.080 回答
1

您尝试分配emp[count]的值是 1 的 ascii 值

你想要的1是 49 的 ascii 值,所以你可以做

emp[count] = 49;

或者

emp[count] = 48 + 1;

或者

emp[count] = '1';

编辑根据您的评论,如果您要做的只是创建一个新文件名,那么这些arrays甚至都不需要。

请参阅@Code-Apprentice 的答案

String file = base + 1 + extension;
于 2016-02-17T02:35:14.363 回答
1

请记住,+运算符专门使用字符串来连接它们。String最重要的是,当另一个操作数+是a 时,任何东西都会自动转换为a String。因此,您可以在一行中完成所有这些操作:

String file = base + 1 + extension;

请注意,这里 1 并不特殊。它是一个 type 的值int。因此,您可以轻松地将其替换为变量名。

于 2016-02-17T02:38:29.077 回答