Java 如何在字符数组中向一个索引添加多个字符?

Java 如何在字符数组中向一个索引添加多个字符?,java,arrays,string,character,Java,Arrays,String,Character,我目前正在尝试创建一个函数,其中我的输入是一个字符串,例如“AABBCCDDEE”,该函数输出一个字符串数组“AA”“BB”“CC”等等 public static char[] stringSplitter(final String input) { String[] strarray = new String[input.length()]; if (input == null) { return nu

我目前正在尝试创建一个函数,其中我的输入是一个字符串,例如“AABBCCDDEE”,该函数输出一个字符串数组“AA”“BB”“CC”等等

    public static char[] stringSplitter(final String input) {

            String[] strarray = new String[input.length()];
            if (input == null) {
                return null;
            }
            char[] chrarray = input.toCharArray();
            char[] outputarray = new char[input.length()];
            int j = 0;
            for (int i = 0; i < chrarray.length; i++) {
                char chr = chrarray[i];
                System.out.print(chr);
                outputarray[j] = chrarray[i]; //here i need to find a way to add the characters to the index at j if the preceding characters are equal
                if (i + 1 < input.length() && chrarray[i + 1] != chr) {
                    j++;
                    outputarray[j] = chrarray[i + 1];
                    System.out.println(" ");
                }
            }
}
publicstaticchar[]stringSplitter(最终字符串输入){
String[]strarray=新字符串[input.length()];
如果(输入==null){
返回null;
}
char[]chrray=input.toCharArray();
char[]outputarray=新字符[input.length()];
int j=0;
对于(int i=0;i
数组的长度是固定的,因此不能对数组执行此操作,除非在前面分配一个具有足够额外空间的数组(这需要遍历字符串以了解需要多少额外空间)


相反,考虑在输出中使用A,当您完成时,可以将其转换成<代码> char 数组。

如果我理解正确,您希望将字符串中的字符拆分,以使相似的连续字符保持在一起。如果是这样,我会这样做:

public static ArrayList<String> splitString(String str) {
    ArrayList<String> output = new ArrayList<>();
    String combo = "";

    //iterates through all the characters in the input
    for(char c: str.toCharArray()) {
        //check if the current char is equal to the last added char
        if(combo.length() > 0 && c != combo.charAt(combo.length() - 1)) {
            output.add(combo);    
            combo = "";
        }

        combo += c;
    }

    output.add(combo); //adds the last character  
    return output;
}

运行上述代码时的输出将为:


[“EEEE”、“B”、“C”、“D”、“D”、“D”、“A”]

您可以使用字符串类型的数组列表来存储拆分后的连续字母字符串。这段代码应该适合你

import java.util.*;
public class StringSplitter{
        static ArrayList<String> splitString(String str)
        {
            ArrayList<String> result_list= new ArrayList<String>();
            int last_index;
            if(str == null)
            {
                return null;
            }
            else
            {
                while(str.length() != 0)
                {
                last_index = str.lastIndexOf(str.charAt(0));
                result_list.add(str.substring(0, last_index+1));
                str = str.substring(last_index+1);
                }
            }
            return result_list;
            }

        public static void main(String[] args)
        {
            ArrayList<String> result = splitString("AABBCCDDEEE");
            System.out.println(result);

        }
     }
import java.util.*;
公共类字符串拆分器{
静态ArrayList拆分字符串(String str)
{
ArrayList result_list=新建ArrayList();
int last_索引;
如果(str==null)
{
返回null;
}
其他的
{
while(str.length()!=0)
{
last_index=str.lastIndexOf(str.charAt(0));
结果列表添加(str.substring(0,最后一个索引+1));
str=str.substring(最后一个索引+1);
}
}
返回结果列表;
}
公共静态void main(字符串[]args)
{
ArrayList结果=拆分字符串(“AABBCCDDEEE”);
系统输出打印项次(结果);
}
}

我使用了ArrayList,因为它不需要您在声明时固定大小。

所以您只想找到相同的连续字符的“运行”序列?是的,每个运行应该在单独的索引中。您知道不能在单个索引中存储*多个*字符,对吗?您需要使用二维字符数组、字符串或其他东西。我不知道这一点,谢谢您的澄清。这意味着我只能使用字符串数组。如何将StringBuilder转换为chararray。是否有.toCharArray方法?@airbmx-请参阅上面链接的文档。没有一个
toCharArray
,没有,但是有一个能让你到达那里的。(或者先转换成
String
,然后使用
String
toCharArray
)谢谢你,不幸的是,我对数组列表不太熟悉,所以在我完全理解你的代码之前,我必须深入了解java文档。非常感谢你!不客气!简而言之,
ArrayList
是一个大小可变的数组。它的用途与普通数组没有太大区别。我还在答案中添加了一些关于我的代码的解释,检查一下,看看它是否有助于您更好地理解它。
import java.util.*;
public class StringSplitter{
        static ArrayList<String> splitString(String str)
        {
            ArrayList<String> result_list= new ArrayList<String>();
            int last_index;
            if(str == null)
            {
                return null;
            }
            else
            {
                while(str.length() != 0)
                {
                last_index = str.lastIndexOf(str.charAt(0));
                result_list.add(str.substring(0, last_index+1));
                str = str.substring(last_index+1);
                }
            }
            return result_list;
            }

        public static void main(String[] args)
        {
            ArrayList<String> result = splitString("AABBCCDDEEE");
            System.out.println(result);

        }
     }