例如将 IP地址转换存到整数数组内部
一 一般来讲先做字符串拆分 使用 split 方法
1. 注意 特殊字符作为分隔符时需要使用\\进行转义(比如使用\\作为分隔符的话,则转义为\\\\)
特殊字符有 .$|()[{^?*+\\
2.注意对最后空字符的处理(通常有些情况在最后数据为空的时候只保留了个分隔符,如果不做处理的话,数据分割后的个数会偏离预期)
String str = "a|b|c|"; //注意这里在最后多了一个|分隔符
String[] strArr = str.split("\\|");
System.out.println(strArr.length); //这里输出3
for (int i = 0; i < strArr.length; ++i){
System.out.println(strArr[i]);//这里输出a b c
}
如果你需要保留最后一个空字符的数据,则需要将split的第二个参数设置为-1
String str = "a|b|c|";//注意这里在最后多了一个|分隔符
String[] strArr = str.split("\\|",-1);//这里将第二个参数设置为-1
System.out.println(strArr.length); //这里输出4
for (int i = 0; i < strArr.length; ++i){
System.out.println(strArr[i]);//这里输出a b c 空字符串
}
二 循环字符串数组,使用函数将字符串转换为整数
三 便捷方法 使用现有的 Arrays 将字符串数组转换为 整数数组
Arrays.stream(ipAddress.split("\\."))
.mapToInt(Integer::parseInt)
.toArray();
扩展篇幅:
Arrays.asList与Arrays.stream
Arrays.asList是将字符串转换为 list
Arrays.stream 将数组转换成流 mapToInt 将每个Integer解包成一个int ,并返回IntStream ,可以转换为 数组
Stream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念。它也不同于 StAX 对 XML 解析的 Stream,也不是 Amazon Kinesis 对大数据实时处理的 Stream。Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作(aggregate operation),或者大批量数据操作 (bulk data operation)。Stream API 借助于同样新出现的 Lambda 表达式,极大的提高编程效率和程序可读性。同时它提供串行和并行两种模式进行汇聚操作,并发模式能够充分利用多核处理器的优势,使用 fork/join 并行方式来拆分任务和加速处理过程。通常编写并行代码很难而且容易出错, 但使用 Stream API 无需编写一行多线程的代码,就可以很方便地写出高性能的并发程序。所以说,Java 8 中首次出现的 java.util.stream 是一个函数式语言+多核时代综合影响的产物。
Stream 不是集合元素,它不是数据结构并不保存数据,它是有关算法和计算的,它更像一个高级版本的 Iterator。原始版本的 Iterator,用户只能显式地一个一个遍历元素并对其执行某些操作;高级版本的 Stream,用户只要给出需要对其包含的元素执行什么操作,比如 “过滤掉长度大于 10 的字符串”、“获取每个字符串的首字母”等,Stream 会隐式地在内部进行遍历,做出相应的数据转换。
Stream 就如同一个迭代器(Iterator),单向,不可往复,数据只能遍历一次,遍历过一次后即用尽了,就好比流水从面前流过,一去不复返。
而和迭代器又不同的是,Stream 可以并行化操作,迭代器只能命令式地、串行化操作。顾名思义,当使用串行方式去遍历时,每个 item 读完后再读下一个 item。而使用并行去遍历时,数据会被分成多个段,其中每一个都在不同的线程中处理,然后将结果一起输出。Stream 的并行操作依赖于 Java7 中引入的 Fork/Join 框架(JSR166y)来拆分任务和加速处理过程
总之,Stream 的特性可以归纳为:
- 不是数据结构
- 它没有内部存储,它只是用操作管道从 source(数据结构、数组、generator function、IO channel)抓取数据。
- 它也绝不修改自己所封装的底层数据结构的数据。例如 Stream 的 filter 操作会产生一个不包含被过滤元素的新 Stream,而不是从 source 删除那些元素。
- 所有 Stream 的操作必须以 lambda 表达式为参数
- 很容易生成数组或者 List
- 惰性化
- 很多 Stream 操作是向后延迟的,一直到它弄清楚了最后需要多少数据才会开始。
- Intermediate 操作永远是惰性化的。
- 并行能力
- 当一个 Stream 是并行化的,就不需要再写多线程代码,所有对它的操作会自动并行进行的。
- 可以是无限的
- 集合有固定大小,Stream 则不必。limit(n) 和 findFirst() 这类的 short-circuiting 操作可以对无限的 Stream 进行运算并很快完成。
stream 的具体详解可参考下面文档
https://blog.csdn.net/a13662080711/article/details/84928181