zoukankan      html  css  js  c++  java
  • 字符串笔试题:在字符串中找出连续最长的数字串

    分析思路:

    (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(映射)。

  • 相关阅读:
    ASP.NET WebAPI Get和Post 传参总结
    关于EF第一次加载慢或过一段时间不访问时再次访问加载慢问题的总结
    jqthumb.js缩略图插件-让缩略图正常显示而不变形
    解决kindeditor编辑器中使用百度地图时不能拖动坐标的问题
    Jzoj3591 数据
    Jzoj3590 珠链
    Jzoj3590 珠链
    C++蜂鸣器歌曲1
    C++蜂鸣器歌曲1
    Jzoj2309 辽哥游戏
  • 原文地址:https://www.cnblogs.com/vmorgen/p/6875360.html
Copyright © 2011-2022 走看看