字符串笔试题:在字符串中找出连续最长的数字串
分析思路:
(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(映射)。