• 寻找字符串的最长数字


    问题描述:从键盘输入一个字符串(包含数字),寻找字符串的最长数字

    实现代码如下:

    /**   
    * @Description: 输出字符串的最长数字串
    * @author Tyson
    * @date 2018/3/25
    * @version V1.0   
    */
    package com.tyson.exam;
    
    import java.util.Collection;
    import java.util.LinkedHashMap;
    import java.util.Map;
    import java.util.Scanner;
    
    public class FindStringMaxNum {
    	
    	public Map<Integer, Integer> findNum(String s) {
    		boolean isNum = false;//标志位,判断s中的字符是不是数字
    		int index=0, num=1;//记录下标和数字个数
    		
    		Map<Integer, Integer> map = new LinkedHashMap<Integer, Integer>();//LinkedHashMap, 有序,将下标和数字个数放到map
    	
    		for(int i=0;i<s.length();i++) {
    			char c = s.charAt(i);
    			
    			if(c>47&&c<58) {	//判断字符c是否为数字,ascii码在48~57
    				if(isNum==true) {//isNum为真,num++,更新下标和数字个数
    					num++;
    					map.put(index, num);
    				} else {	//isNum为假,设置isNum为真,更新下标和数字个数
    					index=i;
    					num=1;
    					isNum = true;
    					map.put(index, num);
    				}
    					
    			} else {	//字符c不是数字,设置isNum为false
    				isNum = false;
    			}
    		}
    		return map;
    	}
    	//Collection转化成数组
    	public int[] toArray(Collection c) {
    		Object[] objArr = c.toArray();
    		int[] arr = new int[objArr.length];
    		for(int i=0;i<objArr.length;i++) {
    			if(objArr[i] instanceof Integer) {
    				arr[i] = (int)objArr[i];
    			}
    		}
    		return arr;
    	}
    	
    	public static void main(String[] args) {
    		System.out.println("please input a string:");
    		Scanner sc = new Scanner(System.in);
    		String s = sc.nextLine();//将输入的字符串保存到s
    		
    		Map<Integer, Integer> map = new LinkedHashMap<Integer, Integer>();
    		FindStringMaxNum f1 = new FindStringMaxNum();
    		
    		map = f1.findNum(s);
    		
    		while(map.size()==0) {
    			System.out.println("The string you input didn't contain number.");
    			System.out.println("Please input again");
    			
    			s = sc.nextLine();//将输入的字符串保存到s
    			map = f1.findNum(s);
    		}
    		
    		int[] arrIndex = new int[map.size()];
    		int[] arrNum = new int[map.size()];
    		//将全部的key(下标)放到数组arrIndex中
    		arrIndex = f1.toArray(map.keySet());
    		//将全部的value(数字个数)放到数组arrNum中
    		arrNum = f1.toArray(map.values());
    		
    		//找出最多数字的个数及下标
    		int max = arrNum[0];
    		int indexOfMax = 0;
    		for(int i=1;i<map.size();i++) {
    			if(max<arrNum[i]) {
    				max=arrNum[i];
    				indexOfMax = i;
    			}
    		}
    		//输出最长数字串,相同长度则取第一个
    		for(int i=arrIndex[indexOfMax];i<arrIndex[indexOfMax]+max;i++) {
    			System.out.print(s.charAt(i));
    		}
    	}
    }
    

    写的不是很好,欢迎大家提出可以改进的地方~

  • 相关阅读:
    WinAPI 字符及字符串函数(10): lstrcpy 复制字符串
    WinAPI 字符及字符串函数(7): IsCharLower 是否是个小写字母
    WinAPI 字符及字符串函数(9): lstrcat 合并字符串
    WinAPI 字符及字符串函数(8): IsCharUpper 是否是个大写字母
    WinAPI 字符及字符串函数(6): IsCharAlphaNumeric 是否是个文字(字母或数字)
    获取汉字编码的几种方法 回复"外来天客"的问题
    上周热点回顾(4.114.17)
    博客园电子期刊2011年3月刊发布啦
    上周热点回顾(3.213.27)
    上周热点回顾(3.73.13)
  • 原文地址:https://www.cnblogs.com/tyson03/p/8643811.html
Copyright © 2020-2023  润新知