• String的补充及完数


      String的常见内存分析题:

        String str1 = new String("hello world");
        String str2 = new String("hello world");
        System.out.println(str1 == str2);
        System.out.println(str1.equals(str2));
        String str3 = "hello world";
        System.out.println(str1 == str3);
        String str4 = "hello world";

        System.out.println(str3 == str4);

    内存分析:

    indexOf( )函数的用法:

    String的其他常见方法见博客:https://www.cnblogs.com/laurarararararara/p/11448731.html

    小练习 1•:

           /**
             * 用户输入一段字符串,包含数字,字母以及其它的字符,统计
             * 字符串中,数字,字母以及其它的字符各自出现的次数,并打印
             * 出来
             */

    逻辑分析:遍历整个字符串,并且需要获取字符串中的每一个字符,判断这个字符是否是数字,字符或者其他类型。

    判断是字串的数字的函数:isDigit( ),  判断是否是字符isLetter( ).

    代码实现:

     Scanner in = new Scanner(System.in);
            String str = in.nextLine();
          System.out.println(str);
         int numberCnt=0;
         int number = 0;
         int charCnt=0;
         int others=0;
          for (int i = 0; i <str.length(); i++) {
         char ch=str.charAt(i);//获取字符串的字符的方法   charAt( )
         if(Character.isDigit(ch)){   //查找数字个数的方法
               numberCnt++;
            }
    //          else if ((ch<='z'&&ch>='a')||(ch<='Z'&&ch>='A')){  //注意或者关系。大写或者小写
    //          CHAR_NUMBER++;
    //           }
            else if(Character.isLetter(ch)){
                  charCnt++;
               }
               else{
                  others++;
              }
           }
            System.out.println("numberCnt:"+numberCnt);
            System.out.println("charCnt:"+charCnt);
            System.out.println("others:"+others);

    结果实现:

     补充•:快捷键注释多行代码与取消注释   ctrl+/  可以注释多行,也可撤销

                 段注释   ctrl+alt+/  可以注释一段,也可撤销

    ctrl+/   效果如图:

    ctrl+alt+/  效果如图:

     小练习2•:

         /**

          * 获取用户输入的一段字符串,该字符串格式(每个字串用空格隔开)如下,把用户输入的数组中的单词找出来并打印

         *如abc7 789t thi *uhh jui 890

         *则输出的单词为thi jui

         */

     

    逻辑分析:用户输入字符串的特点是每输入一段小串,然后用空格隔开,接着输入下一小串。程序的目的是为了找出每一小串是否全是字符则为单词,

    若每一小串的开始第一个就不是字符,则之间跳到写一个空格处继续开始,无需往后判断。

    若没遇到空格,则判断该小串是否全是字符;若遇到空格,则需判断,是因为遍历完了单词串后才遇到的空格,还是从之前跳过来的,

    如果是遍历完单词串则需要记录单词数目。

    根据该逻辑,可以写出简单的if else逻辑

    if(){

    }

    else{

    if(){}

    }

    定义一个flag 变量来判断遇到空格后是否遇到了单词。

    if(ch!=" "){    //如果没有遇见空格,表示正在遍历

    if(!Charachter.isLetter(ch)){  //如果遍历期间遇见了不是单词的,则flag置为false,表示不是一个单词

      flag=false;

     }

    }else{    //否则,遇见了空格

    if(flag){   //前面遍历的是单词

    number++;   //记录单词数目

    }

    else{   //否则,需要重新判断

    flag=false;}

    不足:该程序并未考虑到最后输入的字符串是单词的情况:

    改进如下:

     因为最后的输入的下一个没有遇见空格,所以遍历了剩下的字符串但是没有进入else中判断,所有没有记入单词数目,改进如下:

     如何打印字符串?subString方法,提取字符串:

    String substr = str.substring(idx, str.length());

     上述问题:将用户的输入一组字符单词个数统计完之后,并将单词打印出来

    思路:在判断是单词的时候,将单词打印出来,用当前正在遍历的位置i减去单词的长度count即可获得子串

     整个代码为:

    import java.util.Scanner;
    public class StringTestUnit{
        public static void main(String[] args){
            Scanner in = new Scanner(System.in);
            String str = in.nextLine();
            int charCnt = 0;//字符
            boolean flag = true;//默认为是一个单词
            int number = 0;
            int count = 0;
            for (int i = 0; i < str.length(); i++) {
                char ch = str.charAt(i);//找索引
                if (ch != ' ') {
                    // 如果判断字符的过程中,遇见一个不是字母的字符,不用继续判断了
                    // 直接往后找' '  'a' '8'
                    if (flag && !Character.isLetter(ch)) {
                        // 已经不是一个字母了,也就是不是一个单词了
                        flag = false;
                    }
                    count++;
                } else { // 否则如果遇见空格了
                    if (flag) {
                        System.out.println(str.substring(i - count, i));  //当前正在遍历的位置-单词的字符个数
                        number++;
                    }
                    flag = true; // flag需要重置以下,马上要遍历下一个串了
                    count = 0;
                }
            }
            //这里面需要处理一下长串中的最后一个小的字串是不是单词
            if (flag) {
                number++;
                System.out.println(str.substring(str.length() - count, str.length()));
            }
            System.out.println(number);
        }
    }    

     

     小练习3•:

    /**
    * 请输出1000以内的完数,完数是他的因子的整数的和刚好等于数字本身,比如6=1+2+3
    * 此时,6为完数
    *输出结果如下 6:1 2 3
    */

    如果因数和等于该整数,则这个数为完数。求因数的方法:该整除 除以从1到比它小的整除,如果能整除,则该数为因子。

    题目要求输入因子,需要一个数组来暂时储存因子,否则输出又要重新计算该数的因子。

    for(int i=1;i<=1000;i++){  //整数

       for(int j;j<i;j++){//因数

          if(i%j==0)

          sum=sum+j;  //因数和

          arr[i]=j;//将因子依次放入数组

          i++;   //持续记录数组的值

          }

    if(sum==i)

     {

      System.out.print(i+":");

      for(int j=0;j<i;j++){

      System.out.print(arr[j]+" ");

       }

      }

    }

    public class StringTestUnit2 {
        public static void main(String[] args) {
            /**
             * 请输出1000以内的完数,完数是他的因子的整数的和刚好等于数字本身,比如6=1+2+3
             * 此时,6为完数
             */
            String str1="abc";
            int arr[]=new int[500];
            int index=0;
            for(int i=1;i<=1000;i++) {
                //求出i所有的因数
                int sum=0;
                for (int j = 1; j <i; j++) {
                    if (i % j == 0) {
                        arr[index]=j;  //将因子记录在数组里
                        index++;
                        sum = sum + j;
                    }
                }
                if (sum == i) {
                    System.out.print(i+":");
                    for(int j=0;j<index;j++)
                    {
                        System.out.print(arr[j]+ " ");  //输出数组
                    }
                    System.out.println();
                }
                index=0;  //将索引置0,开始下一个数字的因子在数组的存储
            }
    
        }
    }

  • 相关阅读:
    linux通过源码安装nodejs
    设置npm的镜像源
    ubuntu手动安装PhantomJS
    h2数据库的简单使用
    xampp启动失败 Apache shutdown unexpectedly
    phpqrcode实现二维码(含图片)
    php 使用 rabbitmq
    rabbitMQ linux安装
    rabbitmq的web管理界面无法使用guest用户登录
    linux安装使用xdebug
  • 原文地址:https://www.cnblogs.com/laurarararararara/p/11523796.html
Copyright © 2020-2023  润新知