草庐IT

String类——Java中常见的类(模拟登录案例练习)

小羽-嵌入式编程 2023-04-14 原文

目录

String类的概述及构造方法(String类是Java中最常见的类)

String的特点

 String类的判断功能

 模拟登录案例

​ String类的获取功能

两个小练习

String类的转换功能和String类的其他功能

string类练习

String类的概述及构造方法(String类是Java中最常见的类)

  • String类概述

        –字符串是由多个字符组成的一串数据

        –字符串可以看成是字符数组

  • 构造方法

        –public String(String original)

        –public String(char[] value)

        –public String(char[] value,int offset,int count)

        –直接赋值也可以是一个对象

4种字符方式赋值如下:

package com.demo02;
/*
 * String:字符串类
 * 		由多个字符组成的一串数据
 * 		字符串本身就是一个字符数组
 * 
 *构造方法:
 * 		String(String original):把字符串数据封装成字符串对象
 * 		String(char[] value):把字符数组的数据封装成字符串对象
 * 		String(char[] value, int index, int count):把字符数组中的一部分数据封装成字符串对象
 * 
 * 注意:字符串是一种比较特殊的引用数据类型,直接输出字符串对象输出的是该对象中的数据
 */
public class StringDemo {
	public static void main(String[] args) {
		//方式1
		//String(String original):把字符串数据封装成字符串对象
		String s1 = new String("hello");
		System.out.println("s1:"+s1);
		System.out.println("---------");
		
		//方式2
		//String(char[] value):把字符数组的数据封装成字符串对象
		char[] chs = {'h','e','l','l','o'};
		String s2 = new String(chs);
		System.out.println("s2:"+s2);
		System.out.println("---------");
		
		//方式3
		//String(char[] value, int index, int count):把字符数组中的一部分数据封装成字符串对象
		//String s3 = new String(chs,0,chs.length);
		//char[] chs = {'h','e','l','l','o'};
		String s3 = new String(chs,0,5);//从哪个位置开始,多长
		System.out.println("s3:"+s3);
		System.out.println("---------");
		
		//方式4,比较常用的
		String s4 = "hello";
		System.out.println("s4:"+s4);
	}
}

String的特点

  • 通过构造方法创建字符串对象

        –String s = new String(“hello”);

  • 直接赋值创建字符串对象

        –String s = “hello”;区别是什么?

通过构造方法创建的字符串是在堆内存,直接复制方式创建对象的方法是在常量池。

基本数据类型:比较的是基本数据类型的值是否相同。

引用数据类型:比较的是引用数据类型的地址是否相同。

package com.demo02;
public class StringDemo2 {
	public static void main(String[] args) {
		String s1 = new String("hello");
		String s2 = "hello";
		
		System.out.println("s1:"+s1);
		System.out.println("s2:"+s2);
		
		System.out.println("s1==s2:"+(s1==s2)); //false
		
		String s3 = "hello";
		System.out.println("s1==s3:"+(s1==s3)); //false  放回的地址是不是相等
		System.out.println("s2==s3:"+(s2==s3)); //true
		System.out.println(s1.equals(s2));// 返回的值是不是相等
	}
}

 String类的判断功能

  1. boolean equals(Object obj)——比较两个字符串的值是否相等
  2. boolean equalsIgnoreCase(String str)——不管大小写,都会转化成一样的去做比较
  3. boolean startsWith(String str)——从哪个字符串开始
  4. boolean endsWith(String str)——从哪个字符串结束

其中API有关equals

package com.demo03;

public class StringDemo {
	public static void main(String[] args) {
		//创建字符串对象
		String s1 = "hello";
		String s2 = "hello";
		String s3 = "Hello";
		
		//boolean equals(Object obj):比较字符串的内容是否相同
		System.out.println(s1.equals(s2));
		System.out.println(s1.equals(s3));
		System.out.println("-----------");
		
		//boolean equalsIgnoreCase(String str):比较字符串的内容是否相同,忽略大小写
		System.out.println(s1.equalsIgnoreCase(s2));
		System.out.println(s1.equalsIgnoreCase(s3));
		System.out.println("-----------");
		
		//boolean startsWith(String str):判断字符串对象是否以指定的str开头
		System.out.println(s1.startsWith("he"));
		System.out.println(s1.startsWith("ll"));
		System.out.println("-----------");
		
		//boolean endsWith(String str):判断字符串对象是否以指定的str结尾
		System.out.println(s1.endsWith("ll"));
	}
}

 模拟登录案例

package com.demo03;

import java.util.Scanner;

/*
 * 给三次机会,并提示还有几次
 * 
 * 分析:
 * 		A:定义两个字符串对象,用于存储已经存在的用户名和密码
 * 		B:键盘录入用户名和密码
 * 		C:键盘录入用户名和密码和已经存在的用户名和密码做比较
 * 			如果内容相同,表示登录成功
 * 			如果内容不同,登录失败,并提示还有几次机会
 */
public class StringTest {
	public static void main(String[] args) {
		//定义两个字符串对象,用于存储已经存在的用户名和密码
		String username = "admin";
		String password = "admin";
		
		//给三次机会,用for循环
		for(int x=0; x<3; x++) {
			//键盘录入用户名和密码
			Scanner sc = new Scanner(System.in);
			System.out.println("请输入用户名:");
			String name = sc.nextLine();
			System.out.println("请输入密码");
			String pwd = sc.nextLine();
			
	
			if(username.equals(name) && password.equals(pwd)) {
				System.out.println("登录成功");
				break;
			}else {
				if((2-x) ==0) {
					System.out.println("用户名和密码被锁定,请与管理员联系");
				}else {
					System.out.println("登录失败,你还有"+(2-x)+"次机会"); //2,1,0
				}
			}
		}
	}
}

 String类的获取功能

  1. int length()  —— 字符串长度,其实也就是字符个数
  2. char charAt(int index) —— 获取指定索引处的字符
  3. int indexOf(String str) —— 获取str的字符串对象中第一次出现的索引
  4. String substring(int start)——从start开始截取字符串
  5. String substring(int start,int end)——从start开始,到end结束截取字符串,包括start,不包括end
package com.demo04;

public class StringDemo {
	public static void main(String[] args) {
		//创建字符串对象
		String s = "helloworld";
		
		//int length():获取字符串的长度,也就是字符个数
		System.out.println(s.length());
		System.out.println("--------");
			
			//char charAt(int index):获取指定索引的字符
		System.out.println(s.charAt(0));
		System.out.println(s.charAt(1));
		System.out.println("--------");
		
		//int indexOf(String str):获取str的字符串对象中第一次出现的索引
		System.out.println(s.indexOf("l"));
		System.out.println(s.indexOf("owo"));
		System.out.println(s.indexOf("ak"));
		System.out.println("--------");
		
		//String substring(int start):从start开始截取字符串
		System.out.println(s.substring(0));
		System.out.println(s.substring(5));
		System.out.println("--------");
		
		//String substring(int start,int end):从start开始,到end结束截取字符串,包括start,不包括end
		System.out.println(s.substring(0, s.length()));
		System.out.println(s.substring(3,8));
	}
}

两个小练习:

练习1:遍历字符串

练习2:统计一个字符中大写字符。小写字符,数字字符出现的次数,不考虑其他字符

练习1:遍历字符串

package com.demo04;
/*
 * 遍历字符串(获取字符串中的每一个字符串)
 */
public class StringTest {
	public static void main(String[] args) {
		//创建一个字符串对象
		String s = "abcde";
		
		//原始做法
		System.out.println(s.charAt(0));
		System.out.println(s.charAt(1));
		System.out.println(s.charAt(2));
		System.out.println(s.charAt(3));
		System.out.println(s.charAt(4));
		System.out.println("---------");
		
		//for循环好近
		for(int x=0; x<5; x++) {
			System.out.println(s.charAt(x));
		}
		System.out.println("---------");
		
		//利用s.length()获取字符串长度
		for(int x=0; x<s.length(); x++) {
			System.out.println(s.charAt(x));
		}
	}
}

练习2:统计一个字符中大写字符。小写字符,数字字符出现的次数,不考虑其他字符

package com.demo04;

import java.util.Scanner;

/*
 * 练习2:统计一个字符中大写字符。小写字符,数字字符出现的次数,不考虑其他字符
 * 
 * 分析
 * 		A:键盘录入一个字符串数据
 * 		B:定义三个统计变量,初始值都是0
 * 		C:遍历每一个字符串,得到每一个字符
 * 		D:拿字符进行判断
 * 			加入ch是一个字符
 * 			大写:ch>='A' && ch<='Z'
 * 			小写:ch>='a' && ch<='z'
 * 			数字ch>='0' && ch<='9'
 * 		E:输出结果
 */
public class StringTest2 {
	public static void main(String[] args) {
		//创建一个对象
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入字符");
		// 接收数据
		String s = sc.nextLine();
		
		//定义统计字符
		int bigCount = 0;
		int smallCount = 0;
		int numberCount = 0;
		
		//遍历字符,得到每一个字符
		for(int x=0; x<s.length(); x++) {
			char ch = s.charAt(x);
			//字符判断
			if(ch>='A' && ch<='Z') {
				bigCount++;
			}else if(ch>='a' && ch<='z') {
				smallCount++;
			}else if(ch>='0' && ch<='9') {
				numberCount++;
			}else {
				System.out.println("该字符"+ch+"非法");
			}
		}
		
		//输出结果
		System.out.println("大写字符"+bigCount+"个");
		System.out.println("小写字符"+smallCount+"个");
		System.out.println("数字字符"+numberCount+"个");
	}
}

String类的转换功能String类的其他功能

  1. char[] toCharArray()——把字符串转换为字符数组
  2. String toLowerCase()——把字符串转换为小写字符串
  3. String toUpperCase()——把字符串转换为大写字符串
package com.demo05;
/*
 * 
 * 字符串遍历
 */
public class StringDemo {
	public static void main(String[] args) {
		//创建字符串
		String s = "abcde";
		
		//char[] toCharArray():把字符串转化成字符数组
		char[] chs = s.toCharArray();
		for(int x=0; x<chs.length; x++) {
			System.out.println(chs[x]);
		}
		System.out.println("-----------");
		
		//String toLowerCase():把字符串转换成小写字符串
		System.out.println("HelloWorld".toLowerCase());
		//String toUpperCase():把字符串转换成大写字符串
		System.out.println("HelloWorld".toUpperCase());
	}
}

 其他功能:

        去除字符串两端空格 

        –String trim()

        按照指定符号分割字符串 

        –String[] split(String str)

package com.demo06;

public class StringDemo {
	public static void main(String[] args) {
		//创建字符串对象
		String s1 = "helloworld";
		String s2 = "  helloworld  ";
		String s3 = "  hello  world  ";
		System.out.println("---"+s1+"---");
		System.out.println("---"+s1.trim()+"---");
		System.out.println("---"+s2+"---");
		System.out.println("---"+s2.trim()+"---");
		System.out.println("---"+s3+"---");
		System.out.println("---"+s3.trim()+"---");
		System.out.println("-------------------");
		
		//String[] split(String str)
		//创建字符创对象
		String s4 = "aa,bb,cc";
		String[] strArray = s4.split(",");
		for(int x=0; x<strArray.length; x++) {
			System.out.println(strArray[x]);
		}
	}
}

string类练习

练习1:把数组中的数据按照指定格拼接成一个字符串举例:int[] arr = {1,2,3}; 

输出结果:[1, 2, 3]

package com.demo07;

public class StringTest {
	public static void main(String[] args) {
		//定义一个int类型的数组
		int[] arr = {1,2,3};
		
		
		//定义方法
		String s = arrayToString(arr);
		
		//输出结果
		System.out.println("s:"+s);
	}
	
	/*
	 * 两个明确
	 * 		返回值类型:String
	 * 		参数列表:int[] arr
	 */
	public static String arrayToString(int[] arr) {
		String s = "";
		
		//[1, 2, 3]
		s += "[";
		for(int x=0; x<arr.length; x++) {
			if(x==arr.length-1) {
				s += arr[x];
			}else {
				s += arr[x];
				s += ", ";
			}
		}
		s += "]";
		
		return s;
	}
}

 

练习2:字符串反转举例:键盘录入abc”  输出结果:cba

package com.demo07;

import java.util.Scanner;


public class StringTest2 {
	public static void main(String[] args) {
		//创建一个对象
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入字符");
		String s = sc.nextLine();

		//创建方法
		String result = reverse(s);
		
		//输出结果
		System.out.println("result:"+result);
	}
	
	

	public static String reverse(String s) {
		// 将字符串转换成字符数组
		char[] chs = s.toCharArray();
		
		for(int start=0,end=chs.length-1; start<=end; start++,end--) {
			char temp = chs[start];
			chs[start] = chs[end];
			chs[end] = temp;
		}
		
		//把字符串数组封装成字符串对象
		String ss = new String(chs);
		return ss;
	}
}

 

 

有关String类——Java中常见的类(模拟登录案例练习)的更多相关文章

  1. ruby - 如何模拟 Net::HTTP::Post? - 2

    是的,我知道最好使用webmock,但我想知道如何在RSpec中模拟此方法:defmethod_to_testurl=URI.parseurireq=Net::HTTP::Post.newurl.pathres=Net::HTTP.start(url.host,url.port)do|http|http.requestreq,foo:1endresend这是RSpec:let(:uri){'http://example.com'}specify'HTTPcall'dohttp=mock:httpNet::HTTP.stub!(:start).and_yieldhttphttp.shou

  2. java - 等价于 Java 中的 Ruby Hash - 2

    我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/

  3. ruby - 更改 ActiveRecord 中对象的类 - 2

    假设我有一个FireNinja我的数据库中的对象,使用单表继承存储。后来才知道他真的是WaterNinja.将他更改为不同的子类的最干净的方法是什么?更好的是,我很想创建一个新的WaterNinja对象并替换旧的FireNinja在数据库中,保留ID。编辑我知道如何创建新的WaterNinja来self现有FireNinja的对象,我也知道我可以删除旧的并保存新的。我想做的是改变现有项目的类别。我是通过创建一个新对象并执行一些ActiveRecord魔法来替换行,还是通过对对象本身做一些疯狂的事情,或者甚至通过删除它并使用相同的ID重新插入来做到这一点,这是问题的一部分。

  4. java - 从 JRuby 调用 Java 类的问题 - 2

    我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www

  5. ruby - 字符串文字中的转义状态作为 `String#tr` 的参数 - 2

    对于作为String#tr参数的单引号字符串文字中反斜杠的转义状态,我觉得有些神秘。你能解释一下下面三个例子之间的对比吗?我特别不明白第二个。为了避免复杂化,我在这里使用了'd',在双引号中转义时不会改变含义("\d"="d")。'\\'.tr('\\','x')#=>"x"'\\'.tr('\\d','x')#=>"\\"'\\'.tr('\\\d','x')#=>"x" 最佳答案 在tr中转义tr的第一个参数非常类似于正则表达式中的括号字符分组。您可以在表达式的开头使用^来否定匹配(替换任何不匹配的内容)并使用例如a-f来匹配一

  6. java - 我的模型类或其他类中应该有逻辑吗 - 2

    我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我

  7. ruby - 从 String#split 返回的零长度字符串 - 2

    在Ruby1.9.3(可能还有更早的版本,不确定)中,我试图弄清楚为什么Ruby的String#split方法会给我某些结果。我得到的结果似乎与我的预期相反。这是一个例子:"abcabc".split("b")#=>["a","ca","c"]"abcabc".split("a")#=>["","bc","bc"]"abcabc".split("c")#=>["ab","ab"]在这里,第一个示例返回的正是我所期望的。但在第二个示例中,我很困惑为什么#split返回零长度字符串作为返回数组的第一个值。这是什么原因呢?这是我所期望的:"abcabc".split("a")#=>["bc"

  8. java - 什么相当于 ruby​​ 的 rack 或 python 的 Java wsgi? - 2

    什么是ruby​​的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht

  9. Observability:从零开始创建 Java 微服务并监控它 (二) - 2

    这篇文章是继上一篇文章“Observability:从零开始创建Java微服务并监控它(一)”的续篇。在上一篇文章中,我们讲述了如何创建一个Javaweb应用,并使用Filebeat来收集应用所生成的日志。在今天的文章中,我来详述如何收集应用的指标,使用APM来监控应用并监督web服务的在线情况。源码可以在地址 https://github.com/liu-xiao-guo/java_observability 进行下载。摄入指标指标被视为可以随时更改的时间点值。当前请求的数量可以改变任何毫秒。你可能有1000个请求的峰值,然后一切都回到一个请求。这也意味着这些指标可能不准确,你还想提取最小/

  10. 【Java 面试合集】HashMap中为什么引入红黑树,而不是AVL树呢 - 2

    HashMap中为什么引入红黑树,而不是AVL树呢1.概述开始学习这个知识点之前我们需要知道,在JDK1.8以及之前,针对HashMap有什么不同。JDK1.7的时候,HashMap的底层实现是数组+链表JDK1.8的时候,HashMap的底层实现是数组+链表+红黑树我们要思考一个问题,为什么要从链表转为红黑树呢。首先先让我们了解下链表有什么不好???2.链表上述的截图其实就是链表的结构,我们来看下链表的增删改查的时间复杂度增:因为链表不是线性结构,所以每次添加的时候,只需要移动一个节点,所以可以理解为复杂度是N(1)删:算法时间复杂度跟增保持一致查:既然是非线性结构,所以查询某一个节点的时候

随机推荐