我有一个存储了四个字符的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);
}
}
答案 0 :(得分: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
将分别转换为字符串,然后将其合并为字符串。例如,如果i
为5
,则不使用括号,这会给出51
,而使用括号则会得到6
。
<强>加成强>:
你可以用这样的0
填充数字部分:
String newName = baseName + String.format("%04d", i+1) + extension;
这样,如果长度小于4,则编号部分用零填充以使长度为4.但是如果长度为4或大于4,则该数字不会被剥离。
例如:45
变为0045
,12345
保持12345
答案 1 :(得分:1)
您尝试分配给emp[count]
的值是ascii值1
你想要的是1
的ascii值是49,所以你可以做到
emp[count] = 49;
或
emp[count] = 48 + 1;
或
emp[count] = '1';
修改根据您的评论,如果您尝试的所有内容都创建了新文件名,则甚至不需要这些arrays
。
请参阅@ Code-Apprentice的答案
String file = base + 1 + extension;
答案 2 :(得分:1)
请记住,+
运算符专门用于字符串以连接它们。最重要的是,当String
的另一个操作数为+
时,任何内容都会自动转换为String
。所以你可以在一行中完成所有这些:
String file = base + 1 + extension;
请注意,1在这里并不特别。它是类型为int
的值。因此,您可以使用变量名称轻松替换它。
答案 3 :(得分:0)
这将插入值为1
的char而不是字符1。
emp[count] = (char)1;
请改为尝试:
emp[count] = '1';
编辑: 如果你想要它更动态
int i = ...
emp[count] = (char) ('0'+ i);