字符串中提取数字元素并排序 java实现

一道Java测试题

写一个方法,将某字符串,例如"fa873jiwa12j4wi96awe"转换成"4,12,96,873"

记录下自己写的代码

参加了XX公司的培训班,这几天老师布置了一些题目,自己有点上头了
写了2天代码 ,结果老师3行就解决了
其中

自己写的垃圾code 1

修改前

// An highlighted block
package cn.edu.basic;

import java.util.Arrays;

public class Test1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println(fun1("fa873jiwa12j4wi96awe"));
		
		System.out.println(fun1("fa873jiwa12j4wi96awe125"));
		
		System.out.println(fun1("873jiwa12j4wi96awe125"));
		
		System.out.println(fun1("873jiwa12j4wi96awe12a5"));
		

	}
	/**
	 * 写一个方法,将某字符串,例如"fa873jiwa12j4wi96awe"转换成"4,12,96,873"
	 * @param str
	 * @return
	 */
	public static String fun1(String str)
	{
		char[] charStr=str.toCharArray();
		String []result=new String[str.length()];
		String temp="";
		int sum=0;
		
		for(int i=0;i<charStr.length;i++)
		{
			
			if(charStr[i]>='0'&&charStr[i]<='9')
			{
				temp+=charStr[i];
				//System.out.println(temp);
				if(i<charStr.length-1)
				{
					if(charStr[i+1]>'9'||charStr[i+1]<'0')
					{					
						result[sum++]=temp;
						temp="";			
						continue;
					}
				
				}
				else	
				{
					result[sum++]=temp;
					temp="";
					continue;
					
				}
			
				
			}
		}

		String []result1=new String[sum];
		int []result2=new int[sum];
		for(int i=0;i<sum;i++)
		{
			result1[i]=result[i];
			result2[i]=Integer.valueOf(result[i]);
		}
		
		Arrays.sort(result2);
		return Arrays.toString(result2);
	}

}

代码1 选择的测试字符串
在这里插入图片描述

代码1 运行结果
在这里插入图片描述

自己写的垃圾code2

修改后 调用spilt方法

package cn.edu.basic;
import java.util.Arrays;

public class Test2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println(fun("fa873jiwa12j4wi96awe"));
		System.out.println(fun("873jiwa12j4wi96"));
		System.out.println(fun("873jiwa12j4wi96ji3e"));

	}
	public static String fun(String str)
	{
		String result=new String(str);
		String temp="";
		for(int i=0;i<result.length();i++)
		{
			if(result.charAt(i)<'0'||result.charAt(i)>'9')
			{
				result=result.replace(result.charAt(i), '#');
			}
			else
			{
				temp+= result.charAt(i);
			}
		}
	    String [] result1=result.split("#");	    
//	    System.out.println(Arrays.toString(result1));
//	    System.out.println(result1.length);
	    int sum=0;
	    String test1=new String();
	    for(int i=0;i<result1.length;i++)
	    {
	    	if(!result1[i].isEmpty())
	    	{
	    		sum++;
	    	}
	    	
	    }
	    int [] arr=new int[sum];
	    for(int i=0,j=0;i<result1.length;i++)
	    {
	    	if(!result1[i].isEmpty())
	    	{
	    		arr[j++]=Integer.parseInt(result1[i]);
	    	}
	    	
	    }
	    Arrays.sort(arr);
		
		return Arrays.toString(arr);
	}

}

代码2 测试字符串
在这里插入图片描述

代码2 运行结果
在这里插入图片描述

老师的3句神代码提示下 调用spilt函数和正则表达式

修改后 调用spilt方法 和使用正则表达式

package cn.edu.basic;
import java.util.Arrays;


public class Test3 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String str="fa873jiwa12j4wi96awe";
		System.out.println("处理前:\n"+str);
		System.out.println("处理后:\n"+fun(str));
		
		String str2="873jiwa12j4wi96awe65";
		System.out.println("处理前:\n"+str2);
		System.out.println("处理后:\n"+fun(str2));
		
		String str3="kj873jiwa12j4wi9hkk6awe";
		System.out.println("处理前:\n"+str3);
		System.out.println("处理后:\n"+fun(str3));

		
	}
	public static String fun(String str)
	{
		String []str2=str.replaceAll("[\\D]+"," ").trim().split(" ");
		int[] arr=new int [str2.length];
		for(int i=0;i<arr.length;i++)
		{
			arr[i]=Integer.parseInt(str2[i]);
		}
		Arrays.sort(arr);	
		return Arrays.toString(arr);
	}

}

优化后的运行结果
在这里插入图片描述

总结

暂时不知道说啥 ,也不知道该说什么 感觉自己就是把正则表达式给忽略了 ,当初学c++ 提及过。 谁知道用起来就是这么方便,
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值