间歇性混吃等死,持续性踌躇满志系列-------------第12天

1、字符串的概述和特点

java.lang.String类代表字符串

API当中说,Java程序中所有的字符串字面值(如“abc")都作为此类的实例实现

其实就是说:程序中所有的双引号字符串都是String类的对象(就算没有new,也照样是)

字符串的特点:

  ①字符串的内容用不可变

  ②字符串可以共享使用

  ③字符串效果上相当于char[]字符数组,但是底层原理是byte[]字节数组

2、字符串的构造方法和直接创建

创建字符串的常见3+1种方式

三种构造方法:

①public String(); //创建一个空白字符串,不含有任何内容

②public String(char[] array); //根据字符串数组的内容,来创建对应的字符串

③public String(byte[] array); //根据字节数组的内容,来创建对应的字符串

一种直接创建:

String str = "hello";  //右边直接使用双引号

注:直接写上双引号,就是字符串

 package cn.intcast.demo12;

 public class Demo01String {
public static void main(String[] args) {
// 使用空参构造
String str1 = new String(); //小括号留空,说明字符串什么内容都没有
System.out.println("第一个字符串是:" + str1); //根据字符数组创建字符串
char[] chars = {'a', 'b', 'c'};
String str2 = new String(chars);
System.out.println("第二个字符串是:" + str2); //根据字节数组创建字符串
byte[] bytes = {100, 101, 102};
String str3 = new String(bytes);
System.out.println("第三个字符串是:" + str3); //直接创建
String str4 = "abc";
System.out.println("第四个字符串是:"+str4);
}
}

构造和创建

运行结果图

3、字符串常量池

字符串常量池:程序中直接写上的双引号字符串,就在字符串常量池中。

对于基本类型来说:==是进行数值的比较。

对于引用类型来说:==是进行地址值的比较。

 package cn.intcast.demo12;

 public class Demo01String {
public static void main(String[] args) {
String str1 = "abc";
String str2 = "abc"; char[] chars = {'a','b','c'};
String str3 = new String(chars);
byte[] bytes = {97,98,99};
String str4 = new String(bytes); System.out.println(str1==str2); //true
System.out.println(str2==str3); //false
System.out.println(str3==str4); //false
System.out.println(str2==str4); //false
System.out.println(str4==str1); //false
}
}

运行结果图

4、字符串比较的相关方法

==是进行对象的地址值比较,如果确实需要字符串内容比较,可以使用两个方法

public boolean equals(Object obj);    //参数可以是任何对象,任何对象都能用Object进行接收

只有参数是一个字符串并且内容相同的才会给true,否则返回false。

注:①equals方法具有对称性,也就是a.equals(b)和b.equals(a)效果一样。

  ②如果比较双方一个常量一个变量,推荐把常量字符串写在前面。

  推荐:”abc".equals(str1)        不推荐:str.equals("abc")

public boolean equalsIgnoreCase(String str); // 忽略大小写,进行内容比较

 package cn.intcast.demo12;

 public class Demo01String {
public static void main(String[] args) {
String str1 = "hello";
String str2 = "hello";
char[] chars = {'H', 'e', 'l', 'L', 'o'};
String str3 = new String(chars); System.out.println(str1.equals(str3));
System.out.println(str2.equals(str1));
System.out.println(str1.equals(str2));
System.out.println("hello".equals(str1));
System.out.println(str1.equals("hello"));
System.out.println("===============================");
System.out.println(str1.equalsIgnoreCase(str3)); //忽略大小写进行比较
}
}

运行结果图

5、字符串的获取相关方法

 package cn.intcast.demo12;

 public class Demo01String {
public static void main(String[] args) {
//获取字符串的长度
int length = "afdasfdsafwercxzv".length();
System.out.println("字符串的长度是:" + length); //拼接字符串
String str1 = "hello";
String str2 = "world";
String str3 = str1.concat(str2);
System.out.println("字符串拼接后的结果是:" + str3); //获取指定索引位置的单个字符
char ch = "hello".charAt(0);
System.out.println("在0号索引位置的字符是:" + ch); //查找参数字符串在本来字符串当中出现的第一次索引的位置
//如果根本没有,返回-1值
String str4 = "abcdfghklp";
System.out.println(str1.indexOf("lk"));
System.out.println(str4.indexOf("abc"));
}
}

运行结果图

6、字符串的截取方法

 package cn.intcast.demo12;

 public class Demo01String {
public static void main(String[] args) {
String str1 = "ni hao";
String str2 = "hello world";
System.out.println(str1.substring(3));
System.out.println(str2.substring(6,11));
}
}

运行结果图

7、字符串转换相关的方法

 package cn.intcast.demo12;

 public class Demo01String {
public static void main(String[] args) {
String str1 = "ni hao";
String str2 = "hello world";
System.out.println(str1.toCharArray());
System.out.println(str2.getBytes()); //字符串的内容替换
String str3 = "how do you do";
String str4 = str3.replace("o","$");
System.out.println(str4);
}
}

运行结果图

8、 字符串的分割方法

 package cn.intcast.demo12;

 public class Demo01String {
public static void main(String[] args) {
String str1 = "ni hao a ha ha ";
String[] array1 = str1.split(" ");
for (int i = 0; i < array1.length; i++) {
System.out.println(array1[i]);
}
}
}

运行结果图

9、字符串拼接练习

 package cn.intcast.demo12;

 public class Demo01String {
public static void main(String[] args) {
int[] array1= {1,2,3};
String str1 = fromArrayToString(array1);
System.out.println(str1);
}
public static String fromArrayToString(int[] array){
String str = "[";
for (int i = 0; i < array.length; i++) {
if (i==array.length-1){
str+="word"+array[i]+"]";
}else {
str+="word"+array[i]+"#";
}
}
return str;
} }

运行结果图

10、统计输入的字符串中各种字符的个数

 package cn.intcast.demo12;

 import java.util.Scanner;

 public class Demo01String {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串");
//获取键盘输入的一个字符串
String s = sc.next(); int u = 0;
int l = 0;
int n = 0;
int o = 0; char[] chars = s.toCharArray();
for (int i = 0; i < chars.length; i++) {
//当前单个字符
char ch = chars[i];
if(ch>='A'&&ch<='Z'){
u++;
}else if(ch>='a'&&ch<='z'){
l++;
}else if(ch>='0'&&ch<='9'){
n++;
}else {
o++;
}
}
System.out.println("大写字母有:"+u+"个");
System.out.println("小写字母有:"+l+"个");
System.out.println("数字有:"+n+"个");
System.out.println("其他有:"+o+"个");
}
}

运行结果图

JAVA进阶12的更多相关文章

  1. Java 进阶 hello world! - 中级程序员之路

    Java 进阶 hello world! - 中级程序员之路 Java是一种跨平台的语言,号称:"一次编写,到处运行",在世界编程语言排行榜中稳居第二名(TIOBE index). ...

  2. 从ConcurrentHashMap的演进看Java多线程核心技术 Java进阶(六)

    本文分析了HashMap的实现原理,以及resize可能引起死循环和Fast-fail等线程不安全行为.同时结合源码从数据结构,寻址方式,同步方式,计算size等角度分析了JDK 1.7和JDK 1. ...

  3. Java进阶(七)正确理解Thread Local的原理与适用场景

    原创文章,始自发作者个人博客,转载请务必将下面这段话置于文章开头处(保留超链接). 本文转发自技术世界,原文链接 http://www.jasongj.com/java/threadlocal/ Th ...

  4. JAVA进阶之旅(一)——增强for循环,基本数据类型的自动拆箱与装箱,享元设计模式,枚举的概述,枚举的应用,枚举的构造方法,枚举的抽象方法

    JAVA进阶之旅(一)--增强for循环,基本数据类型的自动拆箱与装箱,享元设计模式,枚举的概述,枚举的应用,枚举的构造方法,枚举的抽象方法 学完我们的java之旅,其实收获还是很多的,但是依然还有很 ...

  5. Java进阶(三十四)Integer与int的种种比较你知道多少?

    Java进阶(三十四)Integer与int的种种比较你知道多少? 前言 如果面试官问Integer与int的区别:估计大多数人只会说到两点:Ingeter是int的包装类,注意是一个类:int的初值 ...

  6. Java进阶(三十二) HttpClient使用详解

    Java进阶(三十二) HttpClient使用详解 Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性(具体区别,日后我们 ...

  7. Java进阶(五十三)屡试不爽之正则表达式

    Java进阶(五十三)屡试不爽之正则表达式 在线测试网址: http://tool.oschina.net/regex/# 上面的在线测试网址,含有正则表达式的生成,非常实用.大家共勉之! 匹配中文: ...

  8. Java进阶(五十二)利用LOG4J生成服务日志

    Java进阶(五十二)利用LOG4J生成服务日志 前言 由于论文写作需求,需要进行流程挖掘.前提是需要有真实的事件日志数据.真实的事件日志数据可以用来发现.监控和提升业务流程. 为了获得真实的事件日志 ...

  9. Java进阶之路

    Java进阶之路——从初级程序员到架构师,从小工到专家. 怎样学习才能从一名Java初级程序员成长为一名合格的架构师,或者说一名合格的架构师应该有怎样的技术知识体系,这是不仅一个刚刚踏入职场的初级程序 ...

随机推荐

  1. SQL NOW() 函数

    NOW() 函数 NOW 函数返回当前的日期和时间. 提示:如果您在使用 Sql Server 数据库,请使用 getdate() 函数来获得当前的日期时间. SQL NOW() 语法 SELECT ...

  2. 文本分类实战(八)—— Transformer模型

    1 大纲概述 文本分类这个系列将会有十篇左右,包括基于word2vec预训练的文本分类,与及基于最新的预训练模型(ELMo,BERT等)的文本分类.总共有以下系列: word2vec预训练词向量 te ...

  3. TPYBoard开发板搭建,实现隐秘通信

    一.准备工作 lTPYBoard v102(简称v102) 1块 lTPYBoard v202(简称v202) 1块 l杜邦线.MicroUSB数据线 若干 (成本100元以内,某宝上可以买到) 附上 ...

  4. localStorage sessionStorage 增强版

    1. 保留了localStorage sessionStorage的(setItem getItem removeItem clear key)api,使用上几乎差不多 2. 增强了setItem方法 ...

  5. linux查询日志常用命令,经常更新

    1.grep命令 grep -c "查询内容" filename    ------c,是小写,可以知道你要查询的内容在这个文件中是否存在 grep -C 10 "查询内 ...

  6. 点击button自动刷新页面的奇葩错误

    以前在写练习的时候遇到过这样一个问题,自己在html中写了一个button <button>test1</button> 在没有给其附上onclick事件时是点击是不会有任何反 ...

  7. Java面试准备之多线程

    什么叫线程安全?举例说明 多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些线程将如何交替执行,并且在主调代码中不需要任何额外的同步或者协同,这个类都能表现出正确的行为,那么就称这个类是线程 ...

  8. 【转】localStorage使用总结

    原文地址:https://www.cnblogs.com/st-leslie/p/5617130.html 一.什么是localStorage.sessionStorage 在HTML5中,新加入了一 ...

  9. 【洛谷】【二分答案+最短路】P1462 通往奥格瑞玛的道路

    在艾泽拉斯大陆上有一位名叫歪嘴哦的神奇术士,他是部落的中坚力量 有一天他醒来后发现自己居然到了联盟的主城暴风城 在被众多联盟的士兵攻击后,他决定逃回自己的家乡奥格瑞玛 题目背景 [题目描述:] 在艾泽 ...

  10. c++入门之函数指针和函数对象

    函数指针可以方便我们调用函数,但采用函数对象,更能体现c++面向对象的程序特性.函数对象的本质:()运算符的重载.我们通过一段代码来感受函数指针和函数对象的使用: int AddFunc(int a, ...