java string类对象赋值_java常见类之String类

1.字符串概述

字符串:就是由多个字符组成的一串字符,也可以看成是字符数组。

String类代表字符串,java程序中的字符串字面值,如"abc"等都作为此类的实例实现。

字符串是常量,一旦被赋值,就不能被改变。

2.String的构造方法

public String() 空构造

public String(byte[] bytes) 把字节数组转换成字符串

public String(byte[] bytes,int offset,int length) 把字节数组的指定索引长度的字节转换成字符串

public String(char[] value) 把字符数组转换成字符串

public String(char[] values,int offset,int count) 把字符数组的指定索引长度的字符转换成字符串

public String(String original) 把字符串常量值转换成字符串package cn;

/**

*  字符串:就是由多个字符组成的一串字符,也可以看成是字符数组

*通过查看API,我们可以知道

*  字符串字面值"abc"也可以看成是一个字符串对象。

*   字符串是常量,一旦被赋值,就不能被改变。

*

*   构造方法:

*   public String() 空构造

*   public String(byte[] bytes) 把字节数组转换成字符串

*   public String(byte[] bytes,int offset,int length)

把字节数组的指定索引长度的字节转换成字符串

*   public String(char[] value) 把字符数组转换成字符串

*   public String(char[] values,int offset,int count)

把字符数组的指定索引长度的字符转换成字符串

*   public String(String original) 把字符串常量值转换成字符串

*

*   字符串的方法:

*   public int length()获取字符串的长度

*/

public class StringDemo {

public static void main(String[] args) {

//public String() 空构造

String s1 = new String();

System.out.println("s1:"+s1);//s1:

//public String(byte[] bytes) 把字节数组转换成字符串

byte[] bytes1 = new byte[]{97,98,99};

String s2 = new String(bytes1);

System.out.println("s2:"+s2);//s2:abc

//public String(byte[] bytes,int offset,int length)

// 把字节数组的指定索引长度的字节转换成字符串

byte[] bytes2 = new byte[]{97,98,99,100};

String s3 = new String(bytes2,1,2);

System.out.println("s3:"+s3);//s3:bc

//public String(char[] value) 把字符数组转换成字符串

char[] char1 = new char[]{'a','b','c'};

String s4 = new String(char1);

System.out.println("s4:"+s4);//s4:abc

//public String(char[] values,int offset,int count)

// 把字符数组的指定索引长度的字符转换成字符串

char[] char2 = new char[]{'a','b','c','d','e'};

String s5 = new String(char2,1,2);

System.out.println("s5:"+s5);//s5:bc

//public String(String original) 把字符串常量值转换成字符串

String s6 = new String("HelloWorld");

System.out.println("s6:"+s6);//s6:HelloWorld

}

}

3.字符串的特点:一旦被声明,就不能被改变package com;

/**

* 字符串的特点:一旦被赋值,就不能被改变。

*   指的是字符串"hello"不可以改变 吗,而不是变量s

*

*字符串直接赋值的方式是先到字符串常量池里面去找,

*如果有就直接返回,没有,就创建并返回。

*

*/

public class StringDemo {

public static void main(String[] args) {

String s = "hello";

s += "world";

System.out.println("s:"+s);//s:helloworld

}

}

fd3e614dca821a1da06e8dd48dad3ff3.png

4.String直接赋值和创建对象方式的区别package com;

/**

*  String s1 = "hello";和 String s2 = new String("hello")的区别

*  前者会创建2个对象,后者会创建一个对象。

*

*  ==在基本类型中,比较的是值是否相等。在引用类型中,比较的是地址值是否相等。

*  equals()在Object类中比较的是地址值是否相等。

*  但是String重写了equals()方法,所以在String比较的是内容是否相等。

*/

public class StringDemo2 {

public static void main(String[] args) {

String s1 = "hello";

String s2 = new String("hello");

System.out.println(s1 == s2);//false

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

}

}

d60ccea93b7e4212e2f09b9258dc6cdf.png

5.练习package com;

/**

* 看程序写结果

*/

public class StringDemo3 {

public static void main(String[] args) {

String s1 = new String("hello");

String s2 = new String("hello");

System.out.println(s1 == s2);//false

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

String s3 = new String("hello");

String s4 = "hello";

System.out.println(s3 == s4);//false

System.out.println(s3.equals(s4));//true

String s5 = "hello";

String s6 = "hello";

System.out.println(s5 == s6 );//true

System.out.println(s5.equals(s6));//true

}

}package com;

/**

* 看程序,写结果

* 字符串如果是变量相加,先开辟空间,再拼接

* 字符串如果是常量相加,是先相加,然后再在常量池中寻找,如果有就直接返回,否则,就创建

*/

public class StringDemo4 {

public static void main(String[] args) {

String s1 = "hello";

String s2 = "world";

String s3 = "helloworld";

System.out.println(s1.hashCode()+s2.hashCode());

System.out.println(s3.hashCode());

/**

* s3 就相当于是s3.hashCode()

* 而s1 + s2 就相当于s1.hashCode() + s2.hashCode()

* 当然不一样了

*/

System.out.println(s3 == s1 + s2);//false

System.out.println(s3.equals(s1 + s2));//true

System.out.println(s3 == "hello"+"world");//true

System.out.println(s3.equals("hello"+"world"));//true

/**

* 通过反编译,看源码,我们知道这里已经做好了处理

*/

System.out.println(s3=="helloworld");

System.out.println(s3.equals("helloworld"));

}

}

6.String类的判断功能

public boolean equals(Object obj) 判断两个字符串的内容是否相等,区分大小写

public boolean equalsIgnoreCase(String str) 判断两个字符串是否相等,不区分大小写

public contains(String str) 判断大的字符串中是否包含有小的字符串

public boolean stratsWith(String str) 判断字符串是否以某个指定的字符串开头

pubilc booelan endsWithd(String str) 判断字符串是否以某个指定的字符串结尾

public boolean isEmpty() 判断字符串的内容是否为空package cn;

/**

*String类的判断功能

* public boolean equals(Object obj) 判断字符串的内容是否相等,区分大小写

* public boolean equalsIgnoreCase(String str) 判断字符串的内容是否相等,不区分大小写

*  public contains(String str) 判断大的字符串中是否包含小的字符串

*  public boolean startsWith(String str) 判断是否以某种字符串开开头

*  public boolean endsWith(String str) 判断是否以某种字符串结尾

*  public boolean isEmpty() 判断字符串的内容是否为空

*

*/

public class StringDemo2 {

public static void main(String[] args) {

//创建字符串对象

String s1 = "helloworld";

String s2 = "helloworld";

String s3 = "helloWorld";

//public boolean equals(Object obj) 判断字符串的内容是否相等,区分大小写

System.out.println(s1.equals(s3));//false

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

//public boolean equalsIgnoreCase(String str) 判断字符串的内容是否相等,不区分大小写

System.out.println(s1.equalsIgnoreCase(s3));//true

System.out.println(s1.equalsIgnoreCase(s2));//true

//public contains(String str) 判断大的字符串中是否包含小的字符串

System.out.println(s1.contains("hello"));//true

System.out.println(s1.contains("hw"));//false

//public boolean startsWith(String str) 判断是否以某种字符串开开头

System.out.println(s1.startsWith("hello"));//true

System.out.println(s1.startsWith("h"));//true

System.out.println(s1.startsWith("world"));//false

//public boolean endsWith(String str) 判断是否以某种字符串结尾

System.out.println(s1.endsWith("world"));//true

//public boolean isEmpty() 判断字符串是否为空

System.out.println(s1.isEmpty());//false

String s4 = "";

System.out.println(s4.isEmpty());//true

String s5 = null;

/**

* Exception in thread "main" java.lang.NullPointerException

* 因为s5的对象不存在,它怎么可以调用方法呢??

*/

//System.out.println(s5.isEmpty());

}

}

7.练习package cn;

import java.util.Scanner;

/**

*

* 模拟登录,给三次机会,并提示还有几次机会

*

* 分析:

* 1.定义用户名和密码,已经存在的

* 2.键盘录入用户名和密码。

*  3.比较用户名和密码,如果都相同,则登录成功,如果有一个不同,则登录失败

*  4.给三次机会,用循环改进,用for循环

*/

public class StringDemo1 {

public static void main(String[] args) {

//定义用户名和密码,已经存在的

String username = "admin";

String password = "admin";

for (int i = 0; i 

//键盘录入用户名和密码

Scanner sc = new Scanner(System.in);

System.out.println("请输入用户名:");

String name = sc.next();

System.out.println("请输入密码:");

String pwd = sc.next();

//比较用户名和密码,如果都相同,则登录成功,如果有一个不同,则登录失败

if(username.equals(name) && password.equals(pwd)){

//如果都相同,则登录成功

System.out.println("登录成功");

break;

}else{

//如果有一个不同,则登录失败

if((2-i) == 0){//如果是第0次,那么就

System.out.println("抱歉,帐号被锁定。");

}else{

System.out.println("登录失败,你还有"+(2-i)+"次机会");

}

}

}

}

}

改进package cn;

import java.util.Scanner;

/**

*

* 模拟登录,给三次机会,并提示还有几次机会,如果登录成功,就可以玩猜数字了

*

* 分析:

* 1.定义用户名和密码,已经存在的

* 2.键盘录入用户名和密码。

*  3.比较用户名和密码,如果都相同,则登录成功,如果有一个不同,则登录失败

*  4.给三次机会,用循环改进,用for循环

*/

public class StringDemo1 {

@SuppressWarnings("resource")

public static void main(String[] args) {

//定义用户名和密码,已经存在的

String username = "admin";

String password = "admin";

boolean flag = false;

for (int i = 0; i 

//键盘录入用户名和密码

Scanner sc = new Scanner(System.in);

System.out.println("请输入用户名:");

String name = sc.next();

System.out.println("请输入密码:");

String pwd = sc.next();

//比较用户名和密码,如果都相同,则登录成功,如果有一个不同,则登录失败

if(username.equals(name) && password.equals(pwd)){

flag = true;

//如果都相同,则登录成功

System.out.println("登录成功");

break;

}else{

//如果有一个不同,则登录失败

if((2-i) == 0){//如果是第0次,那么就

System.out.println("抱歉,帐号被锁定。");

}else{

System.out.println("登录失败,你还有"+(2-i)+"次机会");

}

}

}

if(flag){

GuessNumberGame.start();

}

}

}

package cn;

import java.util.Scanner;

/**

* 创建猜数字的小游戏

*/

public class GuessNumberGame {

private GuessNumberGame(){}

@SuppressWarnings("resource")

public static void start(){

//产生一个随机数

int number = (int)(Math.random() * 100 ) + 1 ;

System.out.println(number);

while(true){

Scanner sc = new Scanner(System.in);

System.out.println("请输入你要猜的数据(1-100):");

int guessNumber = sc.nextInt();

//判断

if(guessNumber > number){

System.out.println("你猜的数据"+guessNumber+"大了");

}else if (guessNumber 

System.out.println("你猜的数据"+guessNumber+"小了");

}else{

System.out.println("恭喜你,猜中了");

break;

}

}

}

}

8.String类的获取功能

public int length() 获取字符串的长度

public char charAt(int index) 获取指定索引位置上的字符

为什么这里是int类型,而不是char类型?

因为:'a'和97是可以相互转换的,即97就是代表'a'

public int indexOf(int ch) 返回指定字符在此字符串中第一次出现的位置

public int indexOf(String str) 返回指定字符串在此字符串中第一次出现的位置

public int indexOf(int ch,int fromIndex)返回指定字符在此支付串从指定位置中第一次出现的位置

public int indexOf(Sring str,itn fromIndex) 返回指定字符串在此字符串从指定位置中第一次出现的位置

public String subString(int start) 从指定位置开始截取的字符串

public String subString(int strat,int end) 从指定位置开始到指定位置结束时截取的字符串package cn;

/**

* String类的获取功能

*  public int length() 获取字符串的长度

*  public char charAt(int index) 获取指定索引位置上的字符

*  为什么这里是int类型,而不是char类型?

*  因为:'a'和97是可以相互转换的,即97就是代表'a'

*  public int indexOf(int ch) 返回指定字符在此字符串中第一次出现的位置

*  public int indexOf(String str) 返回指定字符串在此字符串中第一次出现的位置

*  public int indexOf(int ch,int fromIndex)返回指定字符在此支付串从指定位置中第一次出现的位置

*  public int indexOf(Sring str,itn fromIndex) 返回指定字符串在此字符串从指定位置中第一次出现的位置

*  public String subString(int start) 从指定位置开始截取的字符串

*  public String subString(int strat,int end) 从指定位置开始到指定位置结束时截取的字符串

*/

public class StringDemo4 {

public static void main(String[] args) {

//定义一个字符串

String s = "helloworld";

//public int length() 获取字符串的长度

System.out.println("s的长度是:"+s.length());//s的长度是:10

//public char charAt(int index) 获取指定索引位置上的字符

System.out.println(s.charAt(0));//h

//public int indexOf(int ch) 返回指定字符在此字符串中第一次出现的位置

System.out.println("l出现第一次的索引"+s.indexOf('l'));//l出现第一次的索引2

//public int indexOf(String str) 返回指定字符串在此字符串中第一次出现的位置

System.out.println("hello第一次出现的索引"+s.indexOf("hello"));//hello第一次出现的索引0

//public int indexOf(int ch,int fromIndex)返回指定字符在此支付串从指定位置中第一次出现的位置

System.out.println("l从索引为4开始出现d的第一次索引位置:"+s.indexOf('l', 4));//l从索引为4开始出现d的第一次索引位置:8

System.out.println("l从索引为4开始出现d的第一次索引位置:"+s.indexOf('k', 4));//l从索引为4开始出现d的第一次索引位置:-1

System.out.println("l从索引为4开始出现d的第一次索引位置:"+s.indexOf('l', 40));//l从索引为4开始出现d的第一次索引位置:-1

//public int indexOf(Sring str,itn fromIndex) 返回指定字符串在此字符串从指定位置中第一次出现的位置

System.out.println("or从第2个索引位置开始出现的第一个索引位置:"+s.indexOf("or", 2));//or从第2个索引位置开始出现的第一个索引位置:6

//public String subString(int start) 从指定位置开始截取的字符串

System.out.println("截取world:"+s.substring(5));//截取world:world

System.out.println("截取helloworld:"+s.substring(0));//截取helloworld:helloworld

//public String subString(int strat,int end) 从指定位置开始到指定位置结束时截取的字符串

System.out.println("截取wo:"+s.substring(5, 7));//截取wo:wo

}

}

9.练习package cn;

/**

* 需求:遍历获取字符串中的每一个字符

*

*/

public class StringTest {

public static void main(String[] args) {

String s = "helloworld";

//第一种实现方法

for (int i = 0; i 

char ch = s.charAt(i);

System.out.print(ch+" ");

}

System.out.println();

//第二种实现方法

char[] ch = s.toCharArray();

for (int i = 0; i 

System.out.print(ch[i]+" ");

}

}

}package cn;

/**

*  需求:统计一个字符串中大写字母字符、小写字母字符,数字字符出现的次数(不考虑其他字符)

*  举例:

*  "Hello123World"

*  结果:

*  大写字符 2个

*  小写字符 8个

*  数字字符 3个

*

*

*/

public class StringTest2 {

public static void main(String[] args) {

String str = "Hello123World";

int maxCharacterSum = 0;

int minCharacterSum = 0;

int numSum = 0;

//方法一:将字符串转换为字符数组

char[] chs = str.toCharArray();

for (int i = 0; i 

if(chs[i] >= 'a' && chs[i] <= 'z'){

minCharacterSum ++;

}else if(chs[i] >= 'A' && chs[i] <= 'Z'){

maxCharacterSum ++;

}else if(chs[i] >= '0' && chs[i] <= '9'){

numSum ++;

}

}

System.out.println("大写字符的总数:"+maxCharacterSum);

System.out.println("小写字符的总数:"+minCharacterSum);

System.out.println("数字字符的总数:"+numSum);

//第二中实现

maxCharacterSum = 0;

minCharacterSum = 0;

numSum = 0;

for (int i = 0; i 

char ch = str.charAt(i);

if(ch >= 'a' && ch <= 'z'){

minCharacterSum ++;

}else if(ch >= 'A' && ch <= 'Z'){

maxCharacterSum ++;

}else if(ch >= '0' && ch <= '9'){

numSum ++;

}

}

System.out.println("大写字符的总数:"+maxCharacterSum);

System.out.println("小写字符的总数:"+minCharacterSum);

System.out.println("数字字符的总数:"+numSum);

}

}

10.String类的转换功能

public byte[] getBytes() 字符串转换为字节数组

public char[] toCharArray() 字符串转换为字符数组

public static String valueOf(char[] chs) 将字符数组转换为字符串

public static String valueOf(int i) 将int类型的数值转换为字符串

public String toLowerCase() 将字符串转换为小写

public String toUpperCase() 将字符串转换为大写

public String concat(String str) 字符串的拼接package cn;

/**

* String类的转换功能

*

* public byte[] getBytes() 字符串转换为字节数组

* public char[] toCharArray() 字符串转换为字符数组

* public static String valueOf(char[] chs) 将字符数组转换为字符串

* public static String valueOf(int i) 将int类型的数值转换为字符串

* public String toLowerCase() 将字符串转换为小写

* public String toUpperCase() 将字符串转换为大写

* public String concat(String str) 字符串的拼接

*

*/

public class StringDemo5 {

public static void main(String[] args) {

//定义一个字符串对象

String s = "javaSE";

//public byte[] getBytes() 字符串转换为字节数组

byte[] bytes = s.getBytes();

for (int i = 0; i 

System.out.print(bytes[i]+" ");//106 97 118 97 83 69

}

System.out.println();

//public char[] toCharArray() 字符串转换为字符数组

char[] chs = s.toCharArray();

for (int i = 0; i 

System.out.print(chs[i]+" ");//j a v a S E

}

System.out.println();

// public static String valueOf(char[] chs) 将字符数组转换为字符串

String ss = String.valueOf(chs);

System.out.println(ss);//javaSE

System.out.println();

//public static String valueOf(int i) 将int类型的数值转换为字符串

int num = 100;

System.out.println(s.valueOf(num));//100

System.out.println();

System.out.println("转换小写:"+s.toLowerCase());//转换小写:javase

System.out.println("转换大写:"+s.toUpperCase());//转换大写:JAVASE

System.out.println();

System.out.println(s.concat("javaEE"));//javaSEjavaEE

}

}

11.练习package cn;

/**

* 需求:把一个字符串的首字母转换为大写

* 举例:

* helloWORLD

* 结果

*  HelloWORLD

*/

public class StringTest3 {

public static void main(String[] args) {

String str = "helloWORLD";

str = str.substring(0,1).toUpperCase()+str.substring(1);

System.out.println(str);//HelloWORLD

}

}

package cn;

/**

* 需求:把一个字符串的首字母转换为大写,其余为小写

* 举例:

* helloWORLD

* 结果

*  Helloworld

*/

public class StringTest3 {

public static void main(String[] args) {

String str = "helloWORLD";

str = str.substring(0,1).toUpperCase()+str.substring(1).toLowerCase();

System.out.println(str);//Helloworld

}

}

12.String类的其他功能

替换功能:

public String replace(char old,char new)

public String replace(String old,String new)

去除字符串空格

public String trim()

按字典顺序比较两个字符串

public int compareTo(String str)

public int compareTO(String str)package cn;

/**

* String类的其他功能

* 替换功能:

* public String replace(char old,char new)

*  public String replace(String old,String new)

* 去除字符串空格

*  public String trim()

* 按字典顺序比较两个字符串

*  public int compareTo(String str)

*  public int compareTO(String str)

*

*/

public class StringDemo6 {

public static void main(String[] args) {

//定义一个字符串

String str = "helloworld";

//替换功能

//public String replace(char old,char new)

System.out.println(str.replace('l', 'k'));//hekkoworkd

System.out.println(str);//helloworld

//public String replace(char old,char new)

System.out.println(str.replace("owo", "ak47"));//hellak47rld

//public String trim()

String str2 = " hello  world ";

System.out.println(str2);// hello  world

System.out.println(str2.trim());//hello world

//按字典顺序比较两个字符串

String s1 = "hello";

String s2 = "hello";

String s3 = "abc";

String s4 = "hel";

System.out.println(s1.compareTo(s2));//0

System.out.println(s1.compareTo(s3));//7

System.out.println(s1.compareTo(s4));//2

}

}

对compareTo的解释

查询String类的源代码,如下所示private final char value[];

public String() {

this.value = "".value;

}

public int compareTo(String anotherString) {

int len1 = value.length;//调用String类的这个方法的字符串,就像上图

//中的s1

int len2 = anotherString.value.length;//被比较的字符串,就像上图中

//s2、s3、s4

int lim = Math.min(len1, len2);//获得两个字符串中的长度的最小值

char v1[] = value;

char v2[] = anotherString.value;

int k = 0;

while (k 

char c1 = v1[k];

char c2 = v2[k];

if (c1 != c2) {

return c1 - c2;

}

k++;

}

return len1 - len2;

}

String类维护的就是一个char类型的数组。

13.练习package cn;

/**

* 需求:把数组中的数组按照指定格式拼接成一个字符串

* 举例:

* int[] arr = {1,2,3}

* 输出结果:

* [1, 2, 3]

* 分析:

* 1.先定义一个字符串镀锡,只不过内容为空

* 2.先把字符串拼接成一个"["

* 3.遍历int数组,得到每一个元素值

* 4.先判断该元素是否为最后一个

* 是:就直接拼接元素和"]"

* 不是:就拼接元素,逗号以及空格

*

*/

public class StringTest3 {

public static void main(String[] args) {

int[] arr = {1,2,3};

//定义一个空字符串

String str = "";

//先把字符串拼接成一个[

str +="[";

//遍历数组,获得每一个元素值

for (int i = 0; i 

//如果该元素为最后一个元素,那么就直接拼接元该元素和]

if(i==arr.length-1){

str += arr[i]+"]";

}else{

//如果该元素不是最后一个元素,那么就拼接该,逗号以及空格

str += arr[i]+", ";

}

}

System.out.println("字符串为:"+str);//字符串为:[1, 2, 3]

}

}package cn;

import java.util.Scanner;

/**

*字符串反转

*  举例:键盘录入"abc" 输出结果:"cba"

*/

public class StringTest4 {

@SuppressWarnings("resource")

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

System.out.println("请输入字符串:");

String str = sc.next();

//第一种实现

//使用toCharArray()获得字符数组

char[] chs = str.toCharArray();

for (int i = 0,j=chs.length-1; i 

char  temp = chs[i];

chs[i] = chs[j];

chs[j] = temp;

}

System.out.println("输入的字符串【反转前】:"+str);

System.out.println("反转后的字符串:"+String.valueOf(chs));

//第二种实现

String str2 = "";

//使用length()和charAt()获取每一个字符串

for (int i = str.length()-1; i >= 0; i--) {

char ch = str.charAt(i);

str2 += ch;

}

System.out.println("输入的字符串【反转前】:"+str);

System.out.println("反转后的字符串:"+str2);

}

}package cn;

/**

* 统计大字符串中出现小字符串的次数

* 例如:

* 在字符串"woaijavawozhenaijavawozhendeaijavawozhendezhendeaijavaxinbuxinwoaijavagun"

*结果:

*java出现了5次

*

*思路:

*1.定义一个统计变量 初始化值位0

*2.先获取一次"java"在这个大字符串中第一次出现的索引,如果索引值返回-1,就说明不存在,返回统计变量

*  如果索引值不是-1,就说明存在,统计变量++

*3.把刚才的索引+小字符串的长度作为起始位置截取原始大字符串得到一个新的大字符串,并把该新大字符串重新赋值给大字符串

*4.回到2即可

*/

public class StringTest5 {

public static void main(String[] args) {

//定义大字符串

String str = "woaijavawozhenaijavawozhendeaijavawozhendezhendeaijavaxinbuxinwoaijavagun";

//定义小字符串

String desc ="java";

//写功能实现

int count = getCount(str, desc);

System.out.println(desc+"出现了"+count+"次");//java出现了5次

}

public static int getCount(String str,String desc){

//定义一个统计遍历,初始化值位0

int count = 0;

//先在大字符串中查找小字符串第一次出现的位置

int index = str.indexOf(desc);

//如果索引值不是-1,统计变量++

while(index != -1){

count ++;

//把刚才的索引+小字符串的长度作为起始位置截取原始大字符串得到一个新的大字符串,并把该新大字符串重新赋值给大字符串

int startIndex = index + desc.length();

str = str.substring(startIndex);

//继续查

index = str.indexOf(desc);

}

return  count;

}

}

改进版本package cn;

/**

* 统计大字符串中出现小字符串的次数

* 例如:

* 在字符串"woaijavawozhenaijavawozhendeaijavawozhendezhendeaijavaxinbuxinwoaijavagun"

*结果:

*java出现了5次

*

*思路:

*1.定义一个统计变量 初始化值位0

*2.先获取一次"java"在这个大字符串中第一次出现的索引,如果索引值返回-1,就说明不存在,返回统计变量

*  如果索引值不是-1,就说明存在,统计变量++

*3.把刚才的索引+小字符串的长度作为起始位置截取原始大字符串得到一个新的大字符串,并把该新大字符串重新赋值给大字符串

*4.回到2即可

*/

public class StringTest5 {

public static void main(String[] args) {

//定义大字符串

String str = "woaijavawozhenaijavawozhendeaijavawozhendezhendeaijavaxinbuxinwoaijavagun";

//定义小字符串

String desc ="java";

//写功能实现

int count = getCount(str, desc);

System.out.println(desc+"出现了"+count+"次");//java出现了5次

}

public static int getCount(String str,String desc){

//定义一个统计遍历,初始化值位0

int count = 0;

//先在大字符串中查找小字符串第一次出现的位置

int index = str.indexOf(desc);

//如果索引值不是-1,统计变量++

while(index != -1){

count ++;

//把刚才的索引+小字符串的长度作为起始位置截取原始大字符串得到一个新的大字符串,并把该新大字符串重新赋值给大字符串

str = str.substring(index + desc.length());

//继续查

index = str.indexOf(desc);

}

return  count;

}

}

最终版本package cn;

/**

* 统计大字符串中出现小字符串的次数

* 例如:

* 在字符串"woaijavawozhenaijavawozhendeaijavawozhendezhendeaijavaxinbuxinwoaijavagun"

*结果:

*java出现了5次

*

*思路:

*1.定义一个统计变量 初始化值位0

*2.先获取一次"java"在这个大字符串中第一次出现的索引,如果索引值返回-1,就说明不存在,返回统计变量

*  如果索引值不是-1,就说明存在,统计变量++

*3.把刚才的索引+小字符串的长度作为起始位置截取原始大字符串得到一个新的大字符串,并把该新大字符串重新赋值给大字符串

*4.回到2即可

*/

public class StringTest5 {

public static void main(String[] args) {

//定义大字符串

String str = "woaijavawozhenaijavawozhendeaijavawozhendezhendeaijavaxinbuxinwoaijavagun";

//定义小字符串

String desc ="java";

//写功能实现

int count = getCount(str, desc);

System.out.println(desc+"出现了"+count+"次");//java出现了5次

}

public static int getCount(String str,String desc){

//定义一个统计遍历,初始化值位0

int count = 0;

//如果索引值不是-1,统计变量++

int index ;

while((index=str.indexOf(desc)) != -1){

count ++;

//把刚才的索引+小字符串的长度作为起始位置截取原始大字符串得到一个新的大字符串,并把该新大字符串重新赋值给大字符串

str = str.substring(index + desc.length());

}

return  count;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值