技术标签: Java语言高级
java.lang.String 类代表字符串。
Java程序中所有的字符串文字(例如 “abc” )都可以被看作是实现此类的实例。
类 String 中包括用于检查各个字符串的方法,比如用于比较字符串,搜索字符串,提取子字符串以及创建具有翻译为大写或小写的所有字符的字符串的副本。
## 使用步骤
查看类
java.lang.String :此类不需要导入。
查看构造方法
public String() :初始化新创建的 String对象,以使其表示空字符序列。
public String(char[] value) :通过当前参数中的字符数组来构造新的String。
public String(byte[] bytes) :通过使用平台的默认字符集解码当前参数中的字节数组来构造新的 String。
代码实现:
public class stinglei {
public static void main(String[] args) {
//空参构造
String str1=new String();
System.out.println("第一个字符数组为:"+str1);
//根据字符数组构造
char[] st2={
'L','X'};
String str2=new String (st2);
System.out.println("第二个字符数组为:"+str2);
//根据字节数组构造
byte[] str3={
97,98,99};
String str4=new String (str3);
System.out.println("第三个字符数组为:"+str4);
}
}
public class demo2string {
public static void main(String[] args) {
String str1 = "abc";
String str2 = "abc";
char[] charArray = {
'a', 'b', 'c'};
String str3 = new String(charArray);
System.out.println(str1==str2);
System.out.println(str2==str3);
System.out.println(str1==str3);
}
}
运行结果
字符串常量池:程序当中,直接写上的双引号字符串都在字符串常量池中
对于基本类型来说== 是进行数值的比较
对于引用类型来说 ==是进行地址值的比较
上面代码中第一个字符串和第二个字符串结果为true说明地址值一样
字符串常量池基本原理
是进行对象的地址值比较,如果要对字符串内容比较,可以用两个方法
public boolean equals(Object obj):参数可以是任何对象,只有参数是一个字符串且内容一致才会返回true 否则返回false
equal使用注意事项:
不区分大小写的比较
public class stringcompare {
public static void main(String[] args) {
String str1 = "abc";
String str2 = "abc";
char[] charArray = {
'a', 'b', 'c'};
String str3 = new String(charArray);
System.out.println(str1.equals(str2));
System.out.println(str2.equals(str3));
System.out.println(str3.equals("abc"));
}
}
区分大小写的比较
public class stringcompare {
public static void main(String[] args) {
String str1 = "abc";
String str2 = "Abc";
System.out.println(str1.equals(str2));
System.out.println(str1.equalsIgnoreCase(str2));
}
}
String 当中与获取相关的常用方法有:
public int length():获取字符串当中的字符个数,拿到字符串长度
public String concat(String str):将当前字符串和参数字符串拼接成为返回值新的字符串
public char charAt(int index):获取指定索引位置的单个字符
public int indexOf(String str):查找参数字符串在本字符串当中首次出现的索引位置,如果没有返回-1
public class stringhuoqu {
public static void main(String[] args) {
//获取字符串长度
int length="jahsfjihasjgh".length();
System.out.println(length);
//拼接字符串
String str1="Hello";
String str2="World";
String str3=str1.concat(str2);
System.out.println(str1);
System.out.println(str2);
System.out.println(str3);
//获取指定索引位置的单个字符
char ch="asfdjkaf".charAt(4);
System.out.println("在四号的索引位置是:"+ch);
//查找参数字符串中在本来字符串中第一次出现的位置,若没有返回-1
String ori="sjdfhuiahsfiajd";
int num=ori.indexOf("i");
System.out.println("第一次索引值:"+num);
//若没有呢?
int num2=ori.indexOf("xunxun");
System.out.println("第一次索引值:"+num2);
}
}
public char[] toCharArray() 将当前字符串拆分成字符数组作为返回值
public byte[] getBytes() 获得当前字符串底层的字节数组
public String replace (CharSequence oldString, CharSequence newString)
将所有出现的老字符串替换成新的字符串,返回替换之后的字符串
public class changestring {
public static void main(String[] args) {
String str1 = "HelloWorld";
System.out.println(str1);
char[] str2 = str1.toCharArray();//转换成数组可以一个字一个字玩
System.out.println(str2);
byte[] str3 = str1.getBytes();//IO流常用
for (int i = 0; i < 10; i++) {
System.out.println(str3[i]);
}
//替换词汇时用到String replace
String str="How do you do?";
String str4= str.replace("o","*");
System.out.println(str);//原来字符串不变,需要重新定义一个字符串来接收
System.out.println(str4);
// 比如你打游戏时,队友的一些脏话会进行替换,大部分脏话替换成***
String lang1="会玩不,你大爷的!";//这时候就用到了我们的替换功能了
String lang2=lang1.replace("你大爷的","****");
System.out.println(lang1);//原来输出内容
System.out.println(lang2);//替换后输出内容
}
}
public String substring(int index) 截取从参数位置一直到字符串末尾的
public String substring(int begin,int end)从开始位置截取到结束位置的字符串
public class stringqq {
public static void main(String[] args) {
String str1="HelloWorld";
String str2=str1.substring(5);//从第五个位置截取
System.out.println(str2);//输出截取后的结果
System.out.println(str1);//原来字符串依旧不变
System.out.println("==========");
String str3=str1.substring(4,7);//截取从第二个到第五个
System.out.println(str3);
//下面看一个例子,来解释字符串会不会发生改变
String strA="Hello";
System.out.println(strA);//输出Hello
strA="java";
System.out.println(strA);//输出java
}
//这是不是字符串发生改变?
// 当然不是,这是两个字符串,strA当中保留的是地址值,本来它所保存的是Hello字符串的地址0x666,
// 当执行语句strA=java之后又开辟了新的字符串,并把新的字符串的地址0x999赋值给strA,所以造成了好像字符串改变的假象
//这里所说的地址值均是随意写的,并不代表真正的地址值
分割与截取有一定差距,并不是一类
public String[] splist(String regex)//按照参数规则把字符串切分为若干部分
public class stringdivid {
public static void main(String[] args) {
String str1="汛汛,520";//这是一个字符串
System.out.println(str1);//没有分割以前
String str[]=str1.split(",");//以什么作为划分依据,这里以,作为依据,
// 使用字符串数组接收
for (int i = 0; i < str.length; i++) {
System.out.println(str[i]);//分割以后
}
//注意,
// split方法参数是一个正则表达式 若以“.”作为依据进行分割,
// 必须写||.才可以实现分隔,因为当它单独出现时有单独含义。看下面的例子
String str6="汛汛.520";//使用英文句点分隔
/*String st7[]=str6.split(".");//使用英文句点作为划分依据
//看下运行结果
System.out.println(st7.length);//输出划分后的字符串数组长度,运行结果为0
for (int i = 0; i < str6.length(); i++) {
System.out.println(st7[i]);//运行结果不显示
}
*/
String st8[]=str6.split("\\.");//使用英文句点作为划分依据
//看下运行结果
System.out.println(st8.length);//长度输出结果为2
for (int i = 0; i < str6.length(); i++) {
System.out.println(st8[i]);//
}
}
}
1、定义一个方法,把数组{1,2,3}按照指定形式拼接成【word1#word2#word3】
分析:
准备一个int数组
定义一个方法把数组转换成字符串
用到:循环,字符串拼接,区分下是否是最后一个
public class stringpritace {
public static void main(String[] args) {
int[] arrAy = {
1, 2, 3};
String str2 = get(arrAy);
System.out.println(str2);
}
public static String get(int[] arr) {
String str = "[";
for (int i = 0; i < arr.length; i++) {
if (i == arr.length - 1)
{
str += "word" + arr[i] + "]";
}else
{
str += "word" + arr[i] + "#";
}
}
return str;
}
}
2、键入一个字符串,统计出各种字符出现次数
思路:
Scanner类要使用
String str=sc.next()
定义四个变量,分别代表四种字符出现次数。
对字符串一个字一个字检查(toCharArray)方法
遍历char数组,对当前字符的种类进行判断,并且用四个变量进行++
打印输出
import java.util.Scanner;
public class stringpricate2 {
public static void main(String[] args) {
int shuzi = 0;
int daxiezimu = 0;
int xiaoxiezimu = 0;
int other = 0;
Scanner sc = new Scanner(System.in);
System.out.println("输入一串字符");
String input = sc.next();
char[] str1 = input.toCharArray();
for (int i = 0; i < str1.length; i++) {
char ch=str1[i];
if ('A' <= ch && ch <= 'Z') {
daxiezimu++;
} else if ('a' <= ch && ch <= 'z') {
xiaoxiezimu++;
} else if ('0' <= ch && ch <= '9') {
shuzi++;
} else {
other++;
}
}
System.out.println("大写字母有" + daxiezimu + "个");
System.out.println("小写字母有" + xiaoxiezimu + "个");
System.out.println("数字有" + shuzi + "个");
System.out.println("其他字符有" + other + "个");
}
}
文章浏览阅读2.4k次。一、软件☆1.病毒破坏自从有了计算机以后不久,计算机病毒也应运而生。当网络成为当今社会的信息大动脉后,病毒的传播更加方便,所以也时不时的干扰和破坏我们的正常工作。比较典型的就是前一段时间对全球计算机造成严重破坏的“冲击波”病毒,发作时还会提示系统将在60秒后自动启动。其实,早在DOS时代就有不少病毒能够自动重启你的计算机对于是否属于病毒破坏,我们可以使用最新版的杀毒软件进行杀毒,一般都会发现病毒存_数据库量大电脑重启
文章浏览阅读3.3k次。转自出处(1) 有一个函数fun能返回0和1两个值,返回0和1的概率都是1/2,问怎么利用这个函数得到另一个函数fun2,使fun2也只能返回0和1,且返回0的概率为0.3,返回1的概率为0.7。 分析: Nathan 16:42:59随机生成长度为4的01串0000~1111每个串出现的概率都为1/16Nathan 16:44_已知一个函数f() 可以生成0或1,概率为1/2 让你实现一个函数生成1的概率为p
文章浏览阅读213次。当你在 IDE 中进行代码修改并准备提交时,在代码管理器中,点击CodeGeeX的图标。CodeGeeX会自动分析你的代码变更,并根据 Git Diff 信息生成建议的提交消息。还可以在设置中选择commit message的生成风格,确保了提交消息的一致性和规范性。它的使用方法非常简单,首先在你的VSCode插件市场中,搜索“CodeGeeX”智能编程助手,下载安装。CodeGeeX支持通过git diff信息,自动生成commit message,并成功提交。“这个功能真的是用了,就再也停不下来了!_codegeex生成commit message
文章浏览阅读571次,点赞8次,收藏7次。新手在python中安装包的时候常遇到安装镜像的网站地址问题,导致安装包失败。下面给大家介绍几个国内常用的镜像地址:一、清华镜像。二、中科大镜像。三、阿里云镜像_中科大镜像源
文章浏览阅读2.3k次。先把文件放入hdfs,或用flume采集到hdfs,参看另一篇,再把hdfs文件加载到hive表中alter table ods_nshop.ods_01_releasedatas add partition (bdp_day='20191215') location 'hdfs://hadoop01:9000/data/nshop/ods/release/bdp_day=20191215'..._hdfs文件数据映射到hive 分区
文章浏览阅读543次,点赞7次,收藏6次。支持skp,fbx,obj在线转换为轻量化格式gltf_fbx怎么转gltf
文章浏览阅读5.9k次。内容简介······《深入解析Mac OS X & iOS操作系统》编著者莱文。系统开发者、内核黑客和对苹果感到好奇的人们注意了!本书探讨了MacOSX系统和iOS系统的方方面面,深入讲解了两个系统的架构,讨论了框架手册没有讨论的内容。本书清晰而详细地讨论了苹果操作系统的内部工作原理,包括苹果私有的API,书中的大部分内容都是首次披露。《深入解析Mac OS X ..._深入理解mac os x & ios操作系统 pdf
文章浏览阅读964次。从CMOS的尺寸来看,它的这颗主摄和小米13差不多,同样都拥有1/1.56英寸的底,但华为凭借特别的RYYB特性和F1.4-F4.0可变光圈技术,它的主摄进光量要大于小米13,无论是夜间还是白天的拍照画质都有优势。终于回到小米13的主场了,它采用的是骁龙8Gen2处理器+LPDDR5X内存+UFS4.0存储的组合,从实测来看,它的性能表现在骁龙8Gen2手机中都算出色的那一类,大型游戏场景的帧率高,日常应用的流畅度也高,并且发热控制得较好,整体的性能感受非常好。小米13 更多使用感受和评价。_小米13和华为mate60
文章浏览阅读5.3k次。未完待续_b/s架构好学吗
文章浏览阅读3.4k次,点赞4次,收藏31次。1、前言在了解网卡驱动之前,推荐先看linux内核网络分层结构这篇文章,这里就摘取文章中的两张关于网络数据包的流程图(UDP示例),方便后面网络设备驱动程序的了解:数据结构说明:内核对网络数据包的处理都是基于sk_buff结构的,该结构是内核网络部分最重要的数据结构;对于网络设备驱动比较重要的一部分就是net_device结构体,在include/linux/netdevices.h中定义。(文章只是简单了解驱动框架,没有深入分析)2、MAC控制器驱动程序对于imx6ull的MAC控制_linux驱动 网卡mac通讯
文章浏览阅读7k次,点赞8次,收藏14次。编写程序,设计一个学生类Student和它的子类Undergraduate编写程序,设计一个学生类Student和它的子类Undergraduatepackage 一个题2020_3_31;/** * 学生类 * @author 马志勇 * @version V 1.0 * 许昌学院 * 互祝 互助 互注 *..._设计一个学生类student和它的一个子类
文章浏览阅读2.7k次。本次的题目如下所示:楼梯有n阶台阶,上楼可以一步上1阶,也可以一步上2阶,走完n阶台阶共有多少种不同的走法?输入格式:输入楼梯的阶梯数n输出格式:输出不同走法的个数输入样例:10输出样例:89这是一道非常经典的题目,我们可以先寻找一下上楼梯的规律。题目告诉了我们,一次可以上1阶,也可以上2阶。如果楼梯只有1阶,那很明显只有1种方法;如果楼梯有2阶,我们可以先跨1阶、再跨1阶,也可以直接跨2阶,有2种方法。当有3个台阶的时候,我们要么先上到第1阶,然后再上2阶;_python走楼梯一步三种走法问题