Java求字符串大神算法

小小白每天不奋斗 2019-01-06 08:08:48
字符串格式如下几种:
main( w: Int )
dosth(a:Int, b:int ,c :string)
想办法获得:(冒号)后面的所有数据类型,并依次写出来。
如dosth(a:Int, b:int ,c :string)得到的数据类型分别为Int,int,string
...全文
735 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Italink 2019-01-09
  • 打赏
  • 举报
回复
用正则表达式把字符串提取出来
  • 打赏
  • 举报
回复
后面用强制for循环更好点吧
纵马饮白虹 2019-01-09
  • 打赏
  • 举报
回复
有这样一个算法 有限状态自动机 具体楼主可以去查,举个例子
字符串A:beaaaa!
字符串B:beaaaac
要判断字符串是不是符合 一个字母b、一个字母e、若干个字母a、最后一个字母!的格式
首先将字符串转为char数组
默认状态为0
依次读取char数组
当状态为0时读取到字符b,将状态置为1 继续读取
当状态为1时读取到字符e,将状态置为2,否则置为状态8并退出
当状态为2时读取到字符a,将状态置为3,否则置为9并退出
当状态为3时读取到字符a,状态不变 继续读取,读到字符!时将状态置为4,如果读到其他字符将状态置为10并退出
当状态为4时读取到任何字符,状态置为11并退出
当全部读完 状态为4时,可以说字符串符合格式
其他状态都有对应错误解释
之后可以判断字符串A符合格式,字符串B不符合格式
只要在各个状态时做些操作 就可以提取出楼主想要的信息
有梦想的小白 2019-01-09
  • 打赏
  • 举报
回复
先将数据源 a:Int, b:int ,c :string 左右拼{} 转为json数据,然后通过json解析为map对象,直接获取map的values输出。
小兔子要健康 2019-01-09
  • 打赏
  • 举报
回复
String sourceStr = "A:int,2:int,3:int,4:int,5:string"; String[] sourceStrArray = sourceStr.split(","); for (int i = 0; i < sourceStrArray.length; i++) { String[] getTypeArray =sourceStrArray[i].split(":");          String str=getTypeArray[1];          System.out.println(str);         }
rickylin86 2019-01-08
  • 打赏
  • 举报
回复

import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class Test{
	public static void main(String[] args){
		String content = "dosth(a:Int, b:int ,c :string)";
		String regex = ":\\s*(?<type>[^,)]+?)\\s*(?=[,)])";
		Pattern pattern = Pattern.compile(regex);
		Matcher matcher = pattern.matcher(content);
		while(matcher.find()){
			System.out.println("'" + matcher.group("type") + "'");
		}
	}
}
CatonCheng 2019-01-08
  • 打赏
  • 举报
回复
1.方法中该有的非空判断最好要有
2.习惯加Log日志
public static List<String> dosth(String str){
List<String> dataTypeList= new ArrayList<String>();
if(StringUtils.isNotBlank(str)){
String[] dataTypes=str.split(",");
for(int i=0;i<dataTypes.length;i++){
String dataTypeStr=dataTypes[i];
if(StringUtils.isNotBlank(dataTypeStr)){
dataTypeList.add(dataTypeStr.substring(dataTypeStr.indexOf(":")+1,dataTypeStr.length()));
}
}
}
return dataTypeList;
}
  • 打赏
  • 举报
回复

	public static List<String> getTypes(String str) {
		List<String> result = new ArrayList<String>();
		Matcher m = Pattern.compile("(?<=:\\s{0,10})\\w+").matcher(str);
		while (m.find()) {
			result.add(m.group());
		}
		return result;
	}
qq_39936465 2019-01-07
  • 打赏
  • 举报
回复
引用 1 楼 a996265508 的回复:
下面的方法有两个要求
第一:传值是字符串儿类型的
第二;必须保持 值:值,类型
String sourceStr = "A:int,2:int,3:int,4:int,5:string";
String[] sourceStrArray = sourceStr.split(",");
for (int i = 0; i < sourceStrArray.length; i++) {
String[] getTypeArray =sourceStrArray[i].split(":");
String str=getTypeArray[1];
System.out.println(str);
}


这个方法是把整个参数看作一个字符串,也可以根据参数数量设置参数数量个字符串,可以直接把参数传入一个字符串数组,然后进行split(“:”)就行了。
bcsflilong 2019-01-07
  • 打赏
  • 举报
回复
引用 1 楼 a996265508 的回复:
下面的方法有两个要求
第一:传值是字符串儿类型的
第二;必须保持 值:值,类型
String sourceStr = "A:int,2:int,3:int,4:int,5:string";
String[] sourceStrArray = sourceStr.split(",");
for (int i = 0; i < sourceStrArray.length; i++) {
String[] getTypeArray =sourceStrArray[i].split(":");
String str=getTypeArray[1];
System.out.println(str);
}
这个方法可行
十八道胡同 2019-01-06
  • 打赏
  • 举报
回复
1楼的方法是对的,就是用split(",") 方法来分割字符串里面 ,前后的字符串
split(":") 一样的,就是分割字符串里面;前后的字符串
a996265508 2019-01-06
  • 打赏
  • 举报
回复
下面的方法有两个要求 第一:传值是字符串儿类型的 第二;必须保持 值:值,类型 String sourceStr = "A:int,2:int,3:int,4:int,5:string"; String[] sourceStrArray = sourceStr.split(","); for (int i = 0; i < sourceStrArray.length; i++) { String[] getTypeArray =sourceStrArray[i].split(":"); String str=getTypeArray[1]; System.out.println(str); }

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧