Java 如何在字符数组中向一个索引添加多个字符?
我目前正在尝试创建一个函数,其中我的输入是一个字符串,例如“AABBCCDDEE”,该函数输出一个字符串数组“AA”“BB”“CC”等等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
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);
}
}