字符串笔试题:在字符串中找出连续最长的数字串

分析思路:

(1)遍历整个字符串,要用到for(int i = 0;i<str.length;i++){};

(2)因为数字串有多长预先并不知道,会不断加长数字串,所以要用StringBuffer。StringBuffer对象的内容可以修改;而String对象一旦产生后就不可以被修改,重新赋值其实是两个对象。

(3)一个用来存储以找到的最长数字串,另一个用例存储当前正在处理中的字符串,二者要比较出来谁更长。

(4)数字串长度值作为标志位,要始终保持 数字串长度值 和 数字串 的同步变化。

import java.util.Scanner;

public class Test1{
    public static int findMaxString(String inString){
        int nowStringLength = 0;
        StringBuffer nowStringBuffer = null;
        
        int maxStringLength = 0;
        StringBuffer maxStringBuffer = null;
        
        for(int i =0;i<inString.length();i++){
            if(inString.charAt(i)>=48&&inString.charAt(i)<=57){//char为字符型,实际上也是一种整数类型,16位无符号整数类型。因此可以直接与数值比较大小,加减乘除
                if(nowStringLength==0){//需要判断nowStringLength是否等于0,如果等于0,说明nowStringBuffer为null,需要初始化
                    nowStringBuffer = new StringBuffer(inString.valueOf(inString.charAt(i)));
                    nowStringLength++;
                }else{//nowStringLength不等于0,说明此时nowStringBuffer不为null,无需初始化,直接append(char)即可继续添加连续的数字
                    nowStringBuffer.append(inString.charAt(i));
                    nowStringLength++;//StringLength作为标志位,保持与StringBuffer的同步变化
                }
                if(nowStringLength>maxStringLength){//每处理一个字符,将历史最长值与当前连续最长值进行比较
                    maxStringLength = nowStringLength;
                    maxStringBuffer = nowStringBuffer;
                }
            }else{
                nowStringLength = 0;
                nowStringBuffer = null;
            }
        }
        System.out.println(maxStringBuffer);
        return maxStringLength;
    }
    public static void main(String[] args){
     Scanner sc
= new Scanner(System.in);
     while(sc.hasNextLine()){
  String inString = sc.nextLine();
       System.out.println(findMaxString(inString));
     }
  }
}

主要方法:

(1)StringBuffer

  初始化  StringBuffer sb = null;

       sb = new StringBuffer(String变量);

  方法     append(char变量),在StringBuffer末尾添加一个字符

 

(2)String

  方法    length(),返回字符串长度,有多少个字符

        charAt(index),返回该索引所对应的字符,类似于数组

        valueOf(基本数据类型/对象),返回String

        valueOf(char[] data),将 char 数组 data 转换成字符串

        valueOf(char[] data, int offset, int count) ,将 char 数组 data 中 由 data[offset] 开始取 count 个元素 转换成字符串 

(3)Scanner

  初始化 Scanner sc = new Scanner(System.in);

  方法    nextLine(),将DOS窗口的输入(以Enter键为界)全部读入,返回String

        hasNextLine(),返回输入源中是否还有下一行

(4)另外Char可以直接和ASCII码比较。

学会了找出字符串中最长的数字串,举一反三的,找出其他ASCII区间的字符串也跳不出以上常用的方法。

另外如果要求将字符串中所有的数字串都找出来并要操作,就需要学会利用容器存储,Java中对应的就是3种集合:set(集)、list(列表)和map(映射)。

posted @ 2017-05-18 20:10  太乙遗章  阅读(4896)  评论(0编辑  收藏  举报