java 多个数组合并成一个数组,一个数组分割成多个数组!

本文介绍了如何在Java中将多个数组合并成一个数组的方法,同时也提供了将一个数组分割成多个固定大小数组的实现方案。代码示例清晰,易于理解和实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java 多个数组合并成一个数组,一个数组分割成多个数组!


这没什么好说的,直接上代码:

1,多个数组合并成一个:

  

// tyy 多个数组合并
	private static int[] getListString(int[] aa, int[] bb, int[] cc) {
		// TODO Auto-generated method stub
		List collect = new ArrayList();
		collect.add(aa);
		collect.add(bb);
		collect.add(cc);
		int[] aa0 = null;
		// tyy 每次都是两个数组合并 所以合并的次数为 collect.size() ,第一个是虚拟的数组
		for (int i = 0; i < collect.size(); i++) {
			int[] aa1 = (int[]) collect.get(i);
			int[] newInt = onArrayTogater(aa0, aa1);
			aa0 = newInt;
		}
		return aa0;
	}

	private static int[] onArrayTogater(int[] aa, int[] bb) {
		// TODO Auto-generated method stub
		if (aa == null) {
			return bb;
		}
		int[] collectionInt = new int[aa.length + bb.length];
		for (int i = 0; i < aa.length; i++) {
			collectionInt[i] = aa[i];
		}
		for (int i = aa.length; i < aa.length + bb.length; i++) {
			collectionInt[i] = aa[i - aa.length];
		}
		return collectionInt;

	}

这里合并的数组虽然只写了3个但是理论上可以更多,只需要把需要合并的数组都添加到list中去就可以了。例如:collect.add(dd);



2 , 一个数组分裂成多个数组

/**
	 * tyy
	 * @param dd  要拆分的数组
	 * @param b   每一个拆分的数组的大小
	 * @return
	 */
	private static List<int[]> getListIntArray(int[] dd, int b) {
		List<int[]> aa = new ArrayList<int[]>();
		// tyy 取整代表可以拆分的数组个数
		int f = dd.length / b;
		for (int i = 0; i < f; i++) {
			int[] bbb = new int[b];
			for (int j = 0; j < b; j++) {
				bbb[j] = dd[j + i * b];
			}
			aa.add(bbb);
		}
		return aa;
	}

3整体的代码为

package www.tianren.com;

import java.util.ArrayList;
import java.util.List;

public class java210 {
	public static void main(String[] args) {
		int[] aa = { 0, 6, 4, 5, 24, 3, 4, 56, 2, 34, 5, 3, 2, 2, 34, 5, 3, 2,
				7, 6, 4, 5, 2, 1, 3 };
		int[] bb = { 4, 5, 4, 5, 24, 3, 4, 56, 2, 34, 5, 3, 2, 7, 6, 4, 4, 4,
				4, 4, 4, 4, 4, 4 };
		int[] cc = { 4, 5, 4, 5, 24, 3, 4 };
		int[] dd = getListString(aa, bb, cc);
		List<int[]> ee = new ArrayList<int[]>();
		ee = getListIntArray(dd, 8);
		int[] gg = (int[]) ee.get(0);
		for (int aaaa : gg) {
			System.out.println("eee个数为=" + aaaa);
		}
	}

	/**
	 * tyy
	 * @param dd  要拆分的数组
	 * @param b   每一个拆分的数组的大小
	 * @return
	 */
	private static List<int[]> getListIntArray(int[] dd, int b) {
		List<int[]> aa = new ArrayList<int[]>();
		// tyy 取整代表可以拆分的数组个数
		int f = dd.length / b;
		for (int i = 0; i < f; i++) {
			int[] bbb = new int[b];
			for (int j = 0; j < b; j++) {
				bbb[j] = dd[j + i * b];
			}
			aa.add(bbb);
		}
		return aa;
	}

	// tyy 多个数组合并
	private static int[] getListString(int[] aa, int[] bb, int[] cc) {
		// TODO Auto-generated method stub
		List collect = new ArrayList();
		collect.add(aa);
		collect.add(bb);
		collect.add(cc);
		int[] aa0 = null;
		// tyy 每次都是两个数组合并 所以合并的次数为 collect.size() ,第一个是虚拟的数组
		for (int i = 0; i < collect.size(); i++) {
			int[] aa1 = (int[]) collect.get(i);
			int[] newInt = onArrayTogater(aa0, aa1);
			aa0 = newInt;
		}
		return aa0;
	}

	private static int[] onArrayTogater(int[] aa, int[] bb) {
		// TODO Auto-generated method stub
		if (aa == null) {
			return bb;
		}
		int[] collectionInt = new int[aa.length + bb.length];
		for (int i = 0; i < aa.length; i++) {
			collectionInt[i] = aa[i];
		}
		for (int i = aa.length; i < aa.length + bb.length; i++) {
			collectionInt[i] = aa[i - aa.length];
		}
		return collectionInt;

	}

}

可以自行复制粘贴实验查看结果。


<think>好的,用户现在想了解如何在Java中将长字符串切割多个小字符串,特别是关于分割字符串的方法。我需要结合之前的对话和提供的引用来给出全面的回答。 首先回顾用户的上一个问题,他们问的是Java数组初始化的结果,其中涉及到了字符串分割的问题。我之前详细解释了数组初始化的注意事项,并提到了split()方法的使用。现在用户进一步询问分割字符串的方法,所以需要深入讲解。 根据提供的引用,尤其是引用[2]和引用[4],split()方法主要使用正则表达式作为参数,并且需要注意特殊字符的转义,比如句点需要使用\\。此外,引用[3]和引用[4]提到了多种重载的split方法,包括使用字符数组、限制分割次数、处理空条目等。用户可能不仅需要基础的split用法,还可能关心如何处理复杂情况,比如多分隔符、保留空字符串或去除空白元素。 用户的需求是将长字符串分割多个小字符串,可能需要了解不同的分割方式。需要注意用户可能的深层需求,比如性能考虑、特殊字符处理,或者分割后的结果处理。例如,引用[1]中的例子用了中文分隔符,而引用[2]强调了正则表达式的重要性,这都需要在回答中提及。 我应该按照结构清晰的步骤来组织回答,从基础方法开始,逐步深入,涵盖不同参数的使用、正则表达式处理、特殊案例和性能优化。同时,结合用户之前的问题,可能他们是在处理包含中文或混合分隔符的字符串,所以需要举例说明如何处理这些情况。 另外,用户提供的引用中有提到Split方法的多个重载形式,比如限制分割次数和处理空条目,这些也需要在回答中详细说明,帮助用户全面了解不同的使用场景。可能还需要提到其他方法,比如使用StringTokenizer类或者手动解析,但根据引用内容,重点应该在split方法上。 最后,要确保回答中的代码示例正确,并符合Java语法,比如正确转义字符,使用适当的方法参数。同时,生的相关问题要覆盖用户可能进一步询问的方向,如性能比较、多分隔符处理、空值处理等。</think>在Java中实现字符串切割主要通过`split()`方法及其扩展功能,以下是不同场景下的具体实现方法和注意事项: --- ### 一、基础分割方法 #### 1. 单字符分割 ```java String data = "苹果-香蕉-芒果"; String[] fruits = data.split("-"); // 结果:["苹果", "香蕉", "芒果"] ``` #### 2. 正则表达式分割 ```java String log = "2023.08.15|ERROR|404"; String[] parts = log.split("\\.|\\|"); // 转义特殊字符 // 结果:["2023", "08", "15", "ERROR", "404"] ``` --- ### 二、进阶参数控制 #### 1. 限制分割次数 $$ \text{split(regex, limit)} $$ ```java String csv = "A,B,C,D,E"; String[] limited = csv.split(",", 3); // 结果:["A", "B", "C,D,E"] (保留最后未分割部分) ``` #### 2. 空值处理 ```java String input = "Java,,C++,,Python"; String[] langs1 = input.split(","); // ["Java", "", "C++", "", "Python"] String[] langs2 = input.split(",", -1); // ["Java", "", "C++", "", "Python", ""] String[] langs3 = input.split(",+"); // 正则合并连续分隔符 // ["Java", "C++", "Python"] ``` --- ### 三、特殊场景处理 #### 1. 中文分隔符 ```java String chineseStr = "北京#上海#广州"; String[] cities = chineseStr.split("#"); // 注意中文符号 ``` #### 2. 多分隔符混合 ```java String complex = "数据1; 数据2|数据3,数据4"; String[] segments = complex.split("[;|,]\\s*"); // ["数据1", "数据2", "数据3", "数据4"] ``` --- ### 四、性能优化建议 1. **预编译正则表达式** ```java Pattern pattern = Pattern.compile("\\d+"); String[] numberParts = pattern.split("a1b22c333"); // ["a", "b", "c"] ``` 2. **替代方案对比** | 方法 | 特点 | 适用场景 | |---------------------|----------------------------|--------------------| | `split()` | 灵活但正则开销较大 | 复杂分隔规则 | | `StringTokenizer` | 简单快速但不支持正则 | 基础分割需求 | | 手动索引遍历 | 零依赖但开发本高 | 超高性能要求 | --- ### 五、易错点排查表 | 问题现象 | 原因分析 | 解决方案 | |-----------------------|----------------------------|------------------------------| | 分割结果包含空字符串 | 末尾连续分隔符 | 使用`split(regex, -1)` | | 无法分割中文字符 | 编码或符号半/全角不匹配 | 检查Unicode编码 | | 特殊字符无效分割 | 未转义正则元字符 | 添加`\\`转义 | | 性能低下 | 频繁调用复杂正则 | 预编译Pattern对象 | --- ### 六、完整代码示例 ```java public class AdvancedSplitDemo { public static void main(String[] args) { // 多分隔符+空值处理 String testStr = "数据A;;数据B|数据C, 数据D"; String[] results = testStr.split("[;|,]+\\s*"); // 使用Java8流式处理过滤空值 List<String> filtered = Arrays.stream(results) .filter(s -> !s.isEmpty()) .collect(Collectors.toList()); System.out.println("有效数据项:" + filtered); // 输出:[数据A, 数据B, 数据C, 数据D] } } ``` --- ### 七、延伸方法补充 除了`split()`,还可以通过以下方式实现字符串切割: ```java // 方法1:substring定位切割 String origin = "START_12345_END"; int first = origin.indexOf('_'); int last = origin.lastIndexOf('_'); String core = origin.substring(first+1, last); // "12345" // 方法2:Guava工具库 Iterable<String> segments = Splitter.on(',') .trimResults() .omitEmptyStrings() .split("a,, b,c"); ``` --- --相关问题-- 1. 如何实现按固定长度切割字符串? 2. 多线程环境下字符串分割如何优化性能? 3. 分割包含转义字符的字符串要注意什么? 4. 不同编码格式对中文字符分割有什么影响?
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值