java8 多行字符串_Java8字符串分割的几种方式及性能比较

本文介绍了在Java8中三种不同的字符串分割方法:通过indexOf和substring,通过charAt和substring,以及使用内置的split方法。通过性能测试展示了charAt分割方法在效率上优于其他两种方法。对于大量字符串处理,选择合适的分割方法能显著提升性能。

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

一、方法

1、通过indexOf和substring这两个方法实现字符串分割

实现逻辑:

利用indexOf找出分割的字符在字符串中的位置,根据分割字符的位置切割字符串,再将分割好的字符串放进结果集。

实现代码如下:

/*** @Description: 通过indexof分割字符串

* @Param: [str, regx]

*@return: java.lang.String[]

* @Author: YinYichang

* @Date: 2018/7/18*/

public staticString[] splitByIndex(String str, String regx) {//字符串截取的开始位置

int begin = 0;//字符串截取的结束位置

int limit = 0;//截取分割得到的字符串

String splitStr = "";

ArrayList result = new ArrayList();while (str.indexOf(regx) != -1) {//设置要截取的位置

limit =str.indexOf(regx);

splitStr=str.substring(begin, limit);//设置截取后的字符串

str = str.substring(limit + 1, str.length());

result.add(splitStr);

}if (!StringUtil.isBlank(str)) {

result.add(str);

}

String[] strs= newString[result.size()];returnresult.toArray(strs);

}

2、通过charAt和substring这两个方法实现字符串分割

实现逻辑:

同上,通过charAt方法找出字符所在字符串中的位置,再实现如同方法1的逻辑即可得到分割后的字符串结果集。

实现代码如下:

/*** @Description: 通过charAt分割字符串

* @Param: [str, regx]

*@return: java.lang.String[]

* @Author: YinYichang

* @Date: 2018/7/18*/

public static String[] splitByCharAt(String str, charregx) {//字符串截取的开始位置

int begin = 0;//截取分割得到的字符串

String splitStr = "";

ArrayList result = new ArrayList();int length =str.length();//计数器

int i = 0;for (i = 0; i < length;i++) {if (str.charAt(i) ==regx) {

splitStr=str.substring(begin, i);

result.add(splitStr);

str= str.substring(i + 1, length);

length=str.length();

i= 0;

}

}if (!StringUtil.isBlank(str)) {

result.add(str);

}

String[] strs= newString[result.size()];returnresult.toArray(strs);

}

3、通过java自带的split方法分割字符串

4、通过StringTokenizer对字符串进行分割

通过这种方法分割字符串的使用频率比较少,这种分割需要创建新的对象(对内存造成不必要的开支),虽然该方法提供了提取分割结果的方法,但是也比较麻烦并没有数组那么简单。

/*** @Description: 通过StringTokenizer分割字符串, 该方

* 法分割后将结果封装并提供相关方法提取(很少用到)

* @Param: [str, regx]

*@return: StringTokenizer

* @Author: YinYichang

* @Date: 2018/7/18*/

public staticStringTokenizer splitByStringTokenizer(String str, String regx) {

StringTokenizer stringTokenizer= newStringTokenizer(str, regx);returnstringTokenizer;

}

二、性能测试

由于StringTokenizer很少用到就不测试了,主要测试两种自定义的分割方法和java自带的方法。

测试代码如下:

String str = "a,b,c,d,e,f,g";

System.out.println("测试代码循环10000次。。。,结果如下:");long length = 10000;//indexof字符串分割测试

long begin =System.currentTimeMillis();for (int i = 0; i < length; i++) {

String[] strs= SplitStr.splitByIndex(str, ",");

}long end =System.currentTimeMillis();

System.out.println("indexof分割字符串返回数组用时:"+(end -begin));//charAt字符串分割测试

begin =System.currentTimeMillis();for (int i = 0; i < length; i++) {

String[] strs= SplitStr.splitByCharAt(str, ',');

}

end=System.currentTimeMillis();

System.out.println("charAt分割字符串返回数组用时:"+(end -begin));//split字符串分割测试

begin =System.currentTimeMillis();for (int i = 0; i < length; i++) {

String[] strs= str.split(",");

}

end=System.currentTimeMillis();

System.out.println("split分割字符串用时:"+(end - begin));

测试结果:

922fd94ee65debf16280bef39d0ba7be.png

f3f4e7a33bc2b7b42b5c7002cc30bdd0.png

03644a4c2df1d6a73531f6115de850bb.png

以上测试结果,分别对三种方法循环测试1000次、10000次和100000次,由结果可以看出利用charAt分割字符串的效率是最高的。

其实,查看split方法的实现代码后发现,split采用的分割方式是和自定义的第一种方式类似的,可以看出中两者的差距不是特别大。

代码优化任重道远,如有问题希望给与指正!

### Java统计键盘输入的字符串个数 在Java中,可以通过`Scanner`类从控制台读取用户的输入,并利用特定的方法来处理这些数据。为了统计用户从键盘输入的字符串数量,通常会采用以下方式: #### 使用 `Scanner.nextLine()` 获取多行输入并分割成多个字符串 当需要统计用户输入的字符串个数时,可以先让用户一次性输入若干行文本,再通过分隔符(通常是换行符)将它们拆分成单独的字符串。 以下是具体的代码示例[^1]: ```java import java.util.Scanner; public class StringCounter { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入一段文字,按Ctrl+D结束:"); StringBuilder inputBuilder = new StringBuilder(); while (scanner.hasNextLine()) { // 循环读取每一行直到EOF inputBuilder.append(scanner.nextLine()).append("\n"); } String fullInput = inputBuilder.toString().trim(); // 去除首尾空白 if (!fullInput.isEmpty()) { String[] strings = fullInput.split("\\r?\\n"); // 按照换行分割 int count = strings.length; System.out.println("您一共输入了 " + count + " 行字符串."); for (int i = 0; i < count; i++) { System.out.println("第 " + (i + 1) + " 行: " + strings[i]); } } else { System.out.println("未检测到任何输入!"); } scanner.close(); } } ``` 此代码片段实现了如下功能: - 提供提示信息给用户以便其知道何时停止输入。 - 利用循环不断调用 `hasNextLine()` 和 `nextLine()` 来捕获所有的行直至遇到文件结尾(EOF)[^2]。 - 将所有输入拼接起来形成单一大字符串后去除多余空格。 - 对大字符串按照换行符进行切割得到各个独立的小字符串列表。 - 输出总共有多少条这样的小字符串及其具体内容。 另外一种方法则是基于单词而非行的概念来进行计数: ```java import java.util.*; public class WordCountExample { public static void main(String[] args){ Scanner sc=new Scanner(System.in); System.out.print("Enter a sentence : "); String s=sc.nextLine(); String words[]=s.trim().split("[ ]+");// Split based on space and handle multiple spaces. int wordcount=words.length; System.out.println("Number of Words:"+wordcount); } } ``` 这里我们使用正则表达式"[ ]+"作为参数传递给 split 函数, 这样即使存在连续几个空格也能正确识别为单一间隔从而不影响最终的结果准确性[^3]. 以上两种方案分别适用于不同场景下的需求分析与解决策略.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值