Java 字符串切割String str=in.nextLine(); String []data=str.split(",");

本文详细介绍了如何使用Java中的split方法来分割字符串,并通过实例演示了将包含逗号的字符串分割成数组的过程。假设输入为多行字符串,最终得到的数组将包含所有输入的独立字符串。
for(int i=0;i<n;i++){
String str=in.nextLine();
String []data=str.split(",");
}

意思是将str这个字符串用’,'切割后分别放到data这个String类型的数组中

假设
我分别输入

123
456
789

最后得到的data数组内容是:123,456,789

import java.util.Scanner; import java.util.*; import java.util.stream.Stream; import java.util.HashMap; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int[] params = split(in.nextLine(), " "); int n = params[0]; int m = params[1]; int[][] matrix = new int[n][m]; for (int i = 0; i < n; i++) { int[] temp = split(in.nextLine(), " "); for (int j = 0; j < m; j++) { matrix[i][j] = temp[j]; } } int k = Integer.parseInt(in.nextLine()); int[] nums = split(in.nextLine(), " "); //每一列,出现数字的个数 int[][] count_map = new int[m][1000]; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { count_map[j][matrix[i][j]] +=1; } } int[] target_map = new int[1000]; for (int i = 0; i < k; i++) { target_map[nums[i]]+=1; } int[] cur_count_map = new int[1000]; int width = Integer.MAX_VALUE; int left = 0; int right = 0; while(true){ if(right>=m){ break; } else { for(int i=0;i<1000;i++){ cur_count_map[i] += count_map[right][i]; } while (check(cur_count_map, target_map)) { if(right - left + 1 < width){ width = right - left + 1; } for(int i=0;i<1000;i++){ cur_count_map[i] -= count_map[left][i]; } left+=1; } } right += 1; } if(width == Integer.MAX_VALUE){ System.out.println(-1); } else { System.out.println(width); } } public static int[] split(String input_str,String chars){ String[] tmp2 = input_str.split(chars); int[] nums = new int[tmp2.length]; for (int i = 0; i < tmp2.length; i++) { nums[i] = Integer.parseInt(tmp2[i]); } return nums; } public static boolean check(int[] cur_map, int[] target_map) { for(int i=0;i<1000;i++){ if (cur_map[i] < target_map[i]) { return false; } } return true; } }解释这段代码
08-01
package myiotest; import java.io.*; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; import java.util.Random; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Test01 { public static void main(String[] args) throws IOException { /* 制造假数据: 获取姓氏:https://hanyu.baidu.com/shici/detail?pid=0b2f26d4c0ddb3ee693fdb1137ee1b0d&from=kg0 获取男生名字:http://www.haoming8.cn/baobao/10881.html 获取女生名字:http://www.haoming8.cn/baobao/7641.html */ //1.定义变量记录网址 String familyNameNet = "https://hanyu.baidu.com/shici/detail?pid=0b2f26d4c0ddb3ee693fdb1137ee1b0d&from=kg0"; String boyNameNet = "http://www.haoming8.cn/baobao/10881.html"; String girlNameNet = "http://www.haoming8.cn/baobao/7641.html"; //2.爬取数据,把网址上所有的数据拼接成一个字符串 String familyNameStr = webCrawler(familyNameNet); String boyNameStr = webCrawler(boyNameNet); String girlNameStr = webCrawler(girlNameNet); //3.通过正则表达式,把其中符合要求的数据获取出来 ArrayList<String> familyNameTempList = getData(familyNameStr,"(.{4})(,|。)",1); ArrayList<String> boyNameTempList = getData(boyNameStr,"([\\u4E00-\\u9FA5]{2})(、|。)",1); ArrayList<String> girlNameTempList = getData(girlNameStr,"(.. ){4}..",0); //4.处理数据 //familyNameTempList(姓氏) //处理方案:把每一个姓氏拆开并添加到一个新的集合当中 ArrayList<String> familyNameList = new ArrayList<>(); for (String str : familyNameTempList) { //str 赵钱孙李 周吴郑王 冯陈褚卫 蒋沈韩杨 for (int i = 0; i < str.length(); i++) { char c = str.charAt(i); familyNameList.add(c + ""); } } //boyNameTempList(男生的名字) //处理方案:去除其中的重复元素 ArrayList<String> boyNameList = new ArrayList<>(); for (String str : boyNameTempList) { if(!boyNameList.contains(str)){ boyNameList.add(str); } } //girlNameTempList(女生的名字) //处理方案:把里面的每一个元素用空格进行切割,得到每一个女生的名字 ArrayList<String> girlNameList = new ArrayList<>(); for (String str : girlNameTempList) { String[] arr = str.split(" "); for (int i = 0; i < arr.length; i++) { girlNameList.add(arr[i]); } } //5.生成数据 //姓名(唯一)-性别-年龄 ArrayList<String> list = getInfos(familyNameList, boyNameList, girlNameList, 70, 50); Collections.shuffle(list); //6.写出数据 BufferedWriter bw = new BufferedWriter(new FileWriter("myiotest\\names.txt")); for (String str : list) { bw.write(str); bw.newLine(); } bw.close(); } /* * 作用: * 获取男生和女生的信息:张三-男-23 * * 形参: * 参数一:装着姓氏的集合 * 参数二:装着男生名字的集合 * 参数三:装着女生名字的集合 * 参数四:男生的个数 * 参数五:女生的个数 * */ public static ArrayList<String> getInfos(ArrayList<String> familyNameList,ArrayList<String> boyNameList,ArrayList<String> girlNameList, int boyCount,int girlCount){ //1.生成男生不重复的名字 HashSet<String> boyhs = new HashSet<>(); while (true){ if(boyhs.size() == boyCount){ break; } //随机 Collections.shuffle(familyNameList); Collections.shuffle(boyNameList); boyhs.add(familyNameList.get(0) + boyNameList.get(0)); } //2.生成女生不重复的名字 HashSet<String> girlhs = new HashSet<>(); while (true){ if(girlhs.size() == girlCount){ break; } //随机 Collections.shuffle(familyNameList); Collections.shuffle(girlNameList); girlhs.add(familyNameList.get(0) + girlNameList.get(0)); } //3.生成男生的信息并添加到集合当中 ArrayList<String> list = new ArrayList<>(); Random r = new Random(); //【18 ~ 27】 for (String boyName : boyhs) { //boyName依次表示每一个男生的名字 int age = r.nextInt(10) + 18; list.add(boyName + "-男-" + age); } //4.生成女生的信息并添加到集合当中 //【18 ~ 25】 for (String girlName : girlhs) { //girlName依次表示每一个女生的名字 int age = r.nextInt(8) + 18; list.add(girlName + "-女-" + age); } return list; } /* * 作用:根据正则表达式获取字符串中的数据 * 参数一: * 完整的字符串 * 参数二: * 正则表达式 * 参数三: * 获取数据 * 0:获取符合正则表达式所有的内容 * 1:获取正则表达式中第一组数据 * 2:获取正则表达式中第二组数据 * ...以此类推 * * 返回值: * 真正想要的数据 * * */ private static ArrayList<String> getData(String str, String regex,int index) { //1.创建集合存放数据 ArrayList<String> list = new ArrayList<>(); //2.按照正则表达式的规则,去获取数据 Pattern pattern = Pattern.compile(regex); //按照pattern的规则,到str当中获取数据 Matcher matcher = pattern.matcher(str); while (matcher.find()){ list.add(matcher.group(index)); } return list; } /* * 作用: * 从网络中爬取数据,把数据拼接成字符串返回 * 形参: * 网址 * 返回值: * 爬取到的所有数据 * */ public static String webCrawler(String net) throws IOException { //1.定义StringBuilder拼接爬取到的数据 StringBuilder sb = new StringBuilder(); //2.创建一个URL对象 URL url = new URL(net); //3.链接上这个网址 //细节:保证网络是畅通的,而且这个网址是可以链接上的。 URLConnection conn = url.openConnection(); //4.读取数据 InputStreamReader isr = new InputStreamReader(conn.getInputStream()); int ch; while ((ch = isr.read()) != -1){ sb.append((char)ch); } //5.释放资源 isr.close(); //6.把读取到的数据返回 return sb.toString(); } }解读这段代码
10-16
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值