1、Scanner注意问题

1、Scanner中方法        
          next() -- 查找并返回来自此扫描器的下一个完整标记。

          nextLine() -- 此扫描器执行当前行,并返回跳过的输入信息。

          next() 和 nextLine() 区别:

               next()会将空格键、Tab键或Enter键等视为分隔符或结束符,不能得到带空格的字符串。
                    Scanner scanner = new Scanner(System.in);

                    String string = scanner.next();
          while(true){
               System.out.println(string);
               string = scanner.next();
          }
               nextLine()仅将Enter键作为结束符,返回Enter键前的所有字符,可以得到带空格。
2、案例
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt(); 
String str = scanner.nextLine();
System.out.println(num + str);

          1、问题描述

当录入的顺序依次是int String,并且分别使用nextInt()和nextLine()方法获取数据的时候,会接受不到String数据

          2、解决办法

1、在录入完int后重新创建一个新的Scanner对象

               2、用字符串接受,然后把字符串转成int   



2、String类——构造方法(掌握)

1、字符串概念

由多个字符组成的一串数据。
2、构造方法

创建字符串对象的几种方式

String s = new String();
创建一个空字符串

String s = new String(byte[] bys);  

通过字节数组创建字符串对象,先保留,字节流在用

String s = new String(byte[] bys,int index, int length)

通过字节数组一部分创建字符串对象,先保留,字节流在用

String s = new String(char[] chs)

通过字符数组创建字符串对象常用,先保留,字符流在用

String s = new String(char[] chs, int index, int length);

通过字符数组一部分创建字符串对象,先保留,字符流在用

String s = new String(String);

通过给构造方法传入字符串创建字符字符串对象

String s = “helloworld”
直接给字符串对象赋值常用

 

3、字符串的特点及面试题(掌握)

1、特点及注意事项
          字符串一旦被赋值,就不能改变。
          注意:字符串的值不能改变,引用是可以改变的。

2、面试题

1.判断定义为String类型的s1和s2是否相等

* String s1 = "abc";

* String s2 = "abc";

* System.out.println(s1 == s2); true:因为s1和s2指向的都是常量池中的"abc"

* System.out.println(s1.equals(s2)); true

2.下面这句话在内存中创建了几个对象?

* String s1 = new String("abc"); 2个 堆中一个,方法区中一个

3.判断定义为String类型的s1和s2是否相等

* String s1 = new String("abc");

* String s2 = "abc";

* System.out.println(s1 == s2); false:s1指向堆,s2指向方法区

* System.out.println(s1.equals(s2)); true

4.判断定义为String类型的s1和s2是否相等

* String s1 = "a" + "b" + "c";//常量优化机制导致编译后为String s1 = "abc";

* String s2 = "abc";

* System.out.println(s1 == s2); true:s1,s2指向的都是"abc"

* System.out.println(s1.equals(s2));true

5.判断定义为String类型的s1和s2是否相等

* String s1 = "ab";

* String s2 = "abc";

* String s3 = s1 + "c";            //相当于new String(s1+"c")

* System.out.println(s3 == s2);        false,s2指向方法区,s3指向堆

* System.out.println(s3.equals(s2));true

6 : ""和null的区别

                 最本质的区别是否在内存中开辟内存空间,"'会开辟内存空间,而null不会,在开发的时候要养成良好的习惯用null

4、String类——成员方法(掌握-通过Eclipse&API会用即可)

1、判断功能(全记)

boolean equals(Object obj)

判断字符串的内容是否相同,区分大小写

boolean equalsIgnoreCase(String str)

判断字符串的内容是否相同,忽略大小写

System.out.println("a".equalsIgnoreCase("A"));//true,验证码

boolean contains(String str)

判断字符串对象是否包含给定的字符串

System.out.println("haoyongliang".contains("yong"));//true

boolean startsWith(String str)

判断字符串对象是否是以给定的字符串开始

System.out.println("haoyongliang".startsWith("hao"));//是不是以hao开头的

boolean endsWith(String str)

判断字符串对象是否是以给定的字符串结束

System.out.println("haoyongliang".endsWith("liang"));//是不是以liang结束的

boolean isEmpty()

判断字符串对象是否为空,注意是数据

System.out.println("".isEmpty());

System.out.println(“ ”.isEmpty());//false

2、获取功能

int length()

获取字符串长度

char charAt(int index)

返回字符串中给定索引处的字符

int indexOf(int ch)

返回指定字符在此字符串中第一次出现的索引

int indexOf(String str)

返回指定字符串在此字符串中第一次出现的索引

int indexOf(int ch,int fromIndex)

返回指定字符在此字符串中第一次出现的索引,从指定位置开始

int indexOf(String str,int fromIndex)

返回指定字符串在此字符串中第一次出现的索引,从指定位置开始

String substring(int start)

截取字符串,返回从指定位置开始截取后的字符串,原字符串长度不变

String substring(int start,int end)

截取字符串,返回从指定位置开始到指定位置结束,截取后的字符串原字符串长度不变
//如果start=0,end=该字符串的长度,那么返回的是原对象,否则返回新对象

3、转换功能

byte[] getBytes()

把字符串转换成字节数组,IO,网络编程,编码解码用的比较多

char[] toCharArray()

把字符串转换成字符数组

static String copyValueOf(char[] chs)

把字符数组转换成字符串

底层调用new String(char[] chs)

static String valueOf(char[] chs)

把字符数组转换成字符串

底层调用new String(char[] chs)

static String valueOf(任意类型 变量名)

把任意类型转换成字符串

String toLowerCase()

把字符变成小写原字符串不变

String toUpperCase()

把字符编程大写原字符串不变

String concat(String str)

字符串链接原字符串不变

4、其他功能

String replace(char oldChar,char newChar)

替换功能原字符串不变

String replace(String oldString,String newString)

替换功能原字符串不变

String[] split(String str)

切割功能原字符串不变
字符串的split方法中的字符串

String trim()

去除字符串两端空格原字符串长度不变

int compareTo(String str)

字典顺序比较功能

int compareToIgnoreCase(String str)

字典顺序比较功能



5、案例(掌握-至少3次)

1、需求:统计一个字符串中大写字母字符,小写字母字符,数字字符出现的次数,其他字符出现的次数。
* ABCDEabcd123456!@#$%^
        
  1. /**
  2. * A:案例演示
  3. * 需求:统计一个字符串中大写字母字符,小写字母字符,数字字符出现的次数,其他字符出现的次数。
  4. * ABCDEabcd123456!@#$%^
  5. * 分析:字符串是有字符组成的,而字符的值都是有范围的,通过范围来判断是否包含该字符
  6. * 如果包含就让计数器变量自增
  7. */
  8. public static void main(String[] args) {
  9. String s = "ABCDEabcd123456!@#$%^";
  10. int big = 0;
  11. int small = 0;
  12. int num = 0;
  13. int other = 0;
  14. //1,获取每一个字符,通过for循环遍历
  15. for(int i = 0; i < s.length(); i++) {
  16. char c = s.charAt(i); //通过索引获取每一个字符
  17. //2,判断字符是否在这个范围内
  18. if(c >= 'A' && c <= 'Z') {
  19. big++; //如果满足是大写字母,就让其对应的变量自增
  20. }else if(c >= 'a' && c <= 'z') {
  21. small++;
  22. }else if(c >= '0' && c <= '9') {
  23. num++;
  24. }else {
  25. other++;
  26. }
  27. }
  28. //3,打印每一个计数器的结果
  29. System.out.println(s + "中大写字母有:" + big + "个,小写字母有:" + small + "个,数字字符:"
  30. + num + "个,其他字符:" + other + "个");
  31. }

2、需求:把数组中的数据按照指定个格式拼接成一个字符串
* 举例:
* int[] arr = {1,2,3};
* 输出结果:
* "[1, 2, 3]"
       
  1. public static void main(String[] args) {
  2. int[] arr = {1,2,3};
  3. //"[1,2,3]"
  4. String str = "[";
  5. for(int i=0; i<arr.length; i++){
  6. str = str +arr[i];//str = [1
  7. if(i<arr.length-1){//如果不是最后一个元素,就追加,
  8. str = str + ",";//str = [1,
  9. }
  10. }
  11. str = str+"]";
  12. System.out.println(str);
  13. }

3、需求:把字符串反转
* 举例:键盘录入"abc"
* 输出结果:"cba"
        
  1. /**
  2. * * A:案例演示
  3. * 需求:把字符串反转
  4. * 举例:键盘录入"abc"
  5. * 输出结果:"cba"
  6. *分析:
  7. *1,通过键盘录入获取字符串Scanner
  8. *2,将字符串转换成字符数组
  9. *3,倒着遍历字符数组,并再次拼接成字符串
  10. *4,打印
  11. */
  12. public static void main(String[] args) {
  13. Scanner sc = new Scanner(System.in); //创建键盘录入对象
  14. System.out.println("请输入一个字符串:");
  15. String line = sc.nextLine(); //将键盘录入的字符串存储在line中
  16. char[] arr = line.toCharArray(); //将字符串转换为字符数组
  17. String s = "";
  18. for(int i = arr.length-1; i >= 0; i--) { //倒着遍历字符数组
  19. s = s + arr[i]; //拼接成字符串
  20. }
  21. System.out.println(s);
  22. }

4、需求:统计大串中小串出现的次数
大串:String str = "itheimaoaitheimacastitheimama";
小串:String subStr = "itheima";
  1. /**
  2. * * A:画图演示
  3. * 需求:统计大串中小串出现的次数
  4. * 这里的大串和小串可以自己根据情况给出
  5. *
  6. */
  7. public static void main(String[] args) {
  8. //定义大串
  9. String max = "woaiheima,heimabutongyubaima,wulunheimahaishibaima,zhaodaogongzuojiushihaoma";
  10. //定义小串
  11. String min = "heima";
  12. //定义计数器变量
  13. int count = 0;
  14. //定义索引
  15. int index = 0;
  16. //定义循环,判断小串是否在大串中出现
  17. while((index = max.indexOf(min)) != -1) {
  18. count++; //计数器自增
  19. max = max.substring(index + min.length());
  20. }
  21. System.out.println(count);
  22. }

        5、把字符串首字母转成大写,其余的转成小写
             
  1. public static void main(String[] args) {
  2. String str = "abceEFGHIJKL";
  3. //第一步 获取首字母
  4. String firstStr = str.substring(0,1);//a
  5. //第二步 将首字母转成大写
  6. firstStr = firstStr.toUpperCase();// A
  7. //第三部 获取首字母以外的字符串
  8. String otherStr = str.substring(1);//bceEFGHIJKL
  9. //第四部将首字母以外的字符串转成小写
  10. otherStr = otherStr.toLowerCase();//bceefghijkl
  11. //第五部 拼接
  12. String newStr = firstStr.concat(otherStr);
  13. System.out.println(newStr);
  14. }



6、今天必须掌握的内容。以及常见的笔试题和面试题(学完这个就可以放心学习后面的知识了)今天学习的方法很多,但我们的重点是将总结里的5个案例搞明白即可,剩下没用到的方法,以后遇到了需求我们在回来查看复习即可!


1、获取键盘录入的字符串
2、字符串面试题
3、总结中的的5个案例
4、代码题:录入一个浮点数,例如3.1415926,只获取小数点后两位,只打印3.14
  1. package com.heima.stringStringBuilderStringBuffer;
  2. import java.util.Scanner;
  3. //录入一个浮点数,例如3.1415926,只获取小数点后两位,只打印3.14
  4. public class Test5 {
  5. public static void main(String[] args) {
  6. Scanner sc = new Scanner(System.in);
  7. System.out.println("请录入一个浮点数:");
  8. split(sc.nextLine());
  9. }
  10. public static void split(String s) {
  11. //将传入的数据用点切割成字符数组
  12. String[] arr = s.split("\\.");
  13. //获取到指定位置的字符串
  14. String str = arr[1].substring(0, 2);
  15. //定义字符串序列
  16. StringBuilder sb = new StringBuilder();
  17. //将获取到的元素拼接一起
  18. sb.append(arr[0]).append(".").append(str);
  19. Float f = Float.parseFloat(sb.toString());//Float.parseFloat:将字符串转换成小数
  20. System.out.println(f);
  21. }
  22. }

5、代码题:判断字符串是否对称
  1. public class StringTest01 {
  2. public static void main(String[] args) {
  3. System.out.println(leftEqualsRight("abc"));//FALSE
  4. System.out.println(leftEqualsRight("aba"));//TRUE
  5. System.out.println(leftEqualsRight("abba"));//TRUE
  6. System.out.println(leftEqualsRight("abbc"));//FALSE
  7. }
  8. /**
  9. * 判断字符串是否对称
  10. */
  11. public static boolean leftEqualsRight(String str){
  12. int leftIndex = 0;//左边字符对应的索引
  13. int rightIndex = str.length()-1;//右边字符对应的索引
  14. //循环判断左边字符和右边字符是否相等,一共循环str.length/2 次,左右两边字符如果不相等就返回false
  15. for(int i=0; i<str.length()/2; i++){
  16. int leftData = str.charAt(leftIndex);//左边的字符
  17. int rigthData = str.charAt(rightIndex);//右边的字符
  18. if(leftData != rigthData){
  19. return false;
  20. }
  21. leftIndex++;
  22. rightIndex--;
  23. }
  24. return true;
  25. }
  26. }














day12_API第二天的更多相关文章

  1. 读书笔记:JavaScript DOM 编程艺术(第二版)

    读完还是能学到很多的基础知识,这里记录下,方便回顾与及时查阅. 内容也有自己的一些补充. JavaScript DOM 编程艺术(第二版) 1.JavaScript简史 JavaScript由Nets ...

  2. [ 高并发]Java高并发编程系列第二篇--线程同步

    高并发,听起来高大上的一个词汇,在身处于互联网潮的社会大趋势下,高并发赋予了更多的传奇色彩.首先,我们可以看到很多招聘中,会提到有高并发项目者优先.高并发,意味着,你的前雇主,有很大的业务层面的需求, ...

  3. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库

    在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...

  4. 从0开始搭建SQL Server AlwaysOn 第二篇(配置故障转移集群)

    从0开始搭建SQL Server AlwaysOn 第二篇(配置故障转移集群) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www ...

  5. Entity Framework教程(第二版)

    源起 很多年前刚毕业那阵写过一篇关于Entity Framework的文章,没发首页却得到100+的推荐.可能是当时Entity Framework刚刚发布介绍EF的文章比较少.一晃这么多年过去了,E ...

  6. [C#] 软硬结合第二篇——酷我音乐盒的逆天玩法

    1.灵感来源: LZ是纯宅男,一天从早上8:00起一直要呆在电脑旁到晚上12:00左右吧~平时也没人来闲聊几句,刷空间暑假也没啥动态,听音乐吧...~有些确实不好听,于是就不得不打断手头的工作去点击下 ...

  7. 《Django By Example》第二章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:翻译完第一章后,发现翻译第二章的速 ...

  8. 菜鸟Python学习笔记第二天:关于Python黑客。

    2016年1月5日 星期四 天气:还好 一直不知道自己为什么要去学Python,其实Python能做到的Java都可以做到,Python有的有点Java也有,而且Java还是必修课,可是就是不愿意去学 ...

  9. (转)从0开始搭建SQL Server AlwaysOn 第二篇(配置故障转移集群)

    原文地址:  http://www.cnblogs.com/lyhabc/p/4682028.html 这一篇是从0开始搭建SQL Server AlwaysOn 的第二篇,主要讲述如何搭建故障转移集 ...

随机推荐

  1. R----stringr包介绍学习

    1. stringr介绍 stringr包被定义为一致的.简单易用的字符串工具集.所有的函数和参数定义都具有一致性,比如,用相同的方法进行NA处理和0长度的向量处理. 字符串处理虽然不是R语言中最主要 ...

  2. [问题2015S04] 复旦高等代数 II(14级)每周一题(第五教学周)

    [问题2015S04] 设 \(A\) 为 \(n\) 阶方阵, \(C\) 为 \(k\times n\) 矩阵, 且对任意的 \(\lambda\in\mathbb{C}\), \(\begin{ ...

  3. Oracle简单的函数语言

    函数:这里的函数相当于java中写好的一些方法,有名字,可以传递参数,实现某一项具体功能. 函数分为: 1.单行函数 1.字符函数 2.日期函数 3.数字函数 4.转换函数 2.分组函数(后面的章节再 ...

  4. 动态创建的DOM元素进行事件绑定

    http://files.cnblogs.com/files/xsmhero/jquery.livequery.js <script type="text/javascript&quo ...

  5. js函数式编程

    最近在看朴灵的<深入浅出nodejs>其中讲到函数式编程.理解记录下 高阶函数 比较常见,即将函数作为参数,或是将函数作为返回值得函数. 如ECMAScript5中提供的一些数组方法 fo ...

  6. hdu2243考研路茫茫——单词情结(ac+二分矩阵)

    链接 跟2778差不多,解决了那道题这道也不成问题如果做过基本的矩阵问题. 数比较大,需要用unsigned longlong 就不需要mod了 溢出就相当于取余 #include <iostr ...

  7. Python centOS 安装

    Python 默认版本是2.4.3的,如果需要使用其他版本的需要下载安装 1.下载安装 # cd /usr/local/src # wget https://www.python.org/ftp/py ...

  8. 编写高效且优雅的 Python 代码

    http://python.jobbole.com/86808/ http://python.jobbole.com/86869/?utm_source=blog.jobbole.com&ut ...

  9. 转!!log4j基础

    log4j组件介绍 Log4j主要有三个组件: Logger:负责供客户端代码调用,执行debug(Object msg).info(Object msg).warn(Object msg).erro ...

  10. 动态内存分配导致Javascript性能的问题

    内存分配对性能的影响是很大的,分配内存本身需要时间,垃圾回收器回收内存也需要时间,所以应该尽量避免在堆里分配内存.不过直到最近优化HoLa cantk时,我才深刻的体会到内存分配对性能的影响,其中有一 ...