分析思路:
(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(映射)。