Java中的字符数组追加

3

我有一个字符数组,声明为char[ ] array = new char[20];。关于这个问题,我有以下疑问:

  • 每个位置的默认值是'\0000'吗?

  • 如何将字符追加到该数组中?(例如,每次要求用户输入一个字母并按顺序将字母存储在数组中)

请谅解我的问题。我可以轻松地在C++中实现这些功能,但我对Java还不熟悉。提前感谢!


用户输入可能是字符串?然后您将字符串转换为字节数组?我不明白您的问题。 - TeachMeJava
这与C++实际上没有太大的区别。例如,有System.arraycopy(),它相当于memcpy。还有几个不同的对象类可以使用,类似于C++中的集合类。 - Hot Licks
用户输入是一个字符输入。 - Arjun Bala
4个回答

1
你需要更多地了解从输入流中读取的内容。你可以从这里开始,但是还有其他很棒的教程。
虽然没有直接回答你的问题(因为它仍然不明确),但以下代码从输入中读取了5个字符并输出排序后的字符数组。这将帮助你入门。
public static void main(String[] args) throws IOException {

        char arr[] = new char[5];
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            System.out.println("Enter input characters and press enter: "); 
        for(int i=0; i<arr.length; i++) {
            arr[i] = (char) br.read();
        }       
        br.close();
        Arrays.sort(arr);
            System.out.println("Sorted Array: "+String.valueOf(arr));   
    }

控制台 I/O:

输入字符并按回车:
zeros
排序后的数组:eorsz

此外,正如 Rohit 已经提到的,您应该查阅 String 类 及其广泛的实用函数。另外,由于您可能不知道数组中元素的数量,您可以将其视为一个 List,在这种情况下,您应该使用 List<Character>


1
Java中数组初始化为0。
数组大小也是固定的,如果要添加超过20个字符,您需要创建一个新的、更大的数组并将旧值复制到其中,或者使用更合适的类如StringBuilder。

好的,假设我的数组中有'a'和'e'。我如何在数组中添加一个字母'i'?有直接的方法吗? - Arjun Bala
@ArjunBala 你打算对数组进行排序吗? - zEro
假设你已经声明为 char[20],那么你可以直接说 array[2]='i'。 - Richard Tingle
正确!但是假设我不知道有多少位置被填充了?我怎么知道下一个字符应该填在哪里?这样行吗?:int len=0; int i=0; while(array[i] != '\u0000') { len++; i++; } array[len] = input; - Arjun Bala
你需要在某处跟踪插入的字符。然而,我不建议你使用这种方法,因为你完全可以只保留一个变量,每插入一个字符就将其加一。 - Kayaman

0

您可以按以下方式将数组中的所有字符附加在一起

    char[ ] array = new char[20];
    StringBuilder t=new StringBuilder();
    for (char i:array){
        t.append(i);
    }

0

当你创建一个数组时,它的索引会被填充为你用于该数组的类型的默认值。

因此,对于一个 int[],值 0 将被填充,而对于 char[]\u0000 - null 字符 将被填充。请参见 JLS - Initial Value of Variables,了解其他类型的默认值。

如何将字符附加到这个数组中?

为此,您需要维护当前索引,该索引从 0 开始为空,并且每次在该索引处插入元素时,将其增加一。

如果您有可变大小的数组,则通常无法使用此过程。您应该考虑使用 List<Character>


仅供参考,如果您正在从用户读取字符串,并尝试将该字符串中的每个字符添加到字符数组中,则无需手动执行此操作。String类提供了一个方法 - String.toCharArray(),它可以将您的String对象转换为字符数组。

int len=0; int i=0; while(letters_guessed[i] != '\u0000') { len++; i++; }:这个代码段适合用来找到插入位置吗? - Arjun Bala
@ArjunBala。你不需要每次想要插入东西时都去寻找空位置。只需从i = 0开始插入,然后在guessed[i]处插入一个值,通过i++来递增i,下一次插入时,你就知道要在guessed[1]处进行插入,当你执行guessed[i]操作时。你只需要检查范围。i不应超过允许的最大索引。 - Rohit Jain
假设我需要找出空位置,我的代码正确吗? - Arjun Bala
@ArjunBala。好的。看起来没问题。只是你不需要把 len 变量初始化为 0。将它等于数组长度,并且在 while 循环中也检查 i < len - Rohit Jain

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接