网站建设刂搜金手指下拉贰肆,大连哪个公司做网站好,网站建设与管理课程代码,python 显示wordpress一#xff0c;什么是String类
在C语言中已经涉及到字符串了#xff0c;但是在C语言中要表示字符串只能使用字符数组或者字符指针#xff0c;可以使用标准库提 供的字符串系列函数完成大部分操作#xff0c;但是这种将数据和操作数据方法分离开的方式不符合面相对象的思想什么是String类
在C语言中已经涉及到字符串了但是在C语言中要表示字符串只能使用字符数组或者字符指针可以使用标准库提 供的字符串系列函数完成大部分操作但是这种将数据和操作数据方法分离开的方式不符合面相对象的思想而字 符串应用又非常广泛因此Java语言专门提供了String类
二常用方法
2.1字符串构造方法
既然了解了String类我们如何初始化它呢。
我们有三种常见方法
第一种是直接引用
String name 小明;
第二种是创建新对象引用对象
String name1 new String(小华);
第三种是用字符数组转换 char[] str new char[]{1,2,3,4};String name2 new String(str);
我们来打印一下 都能正常输出。
我们说过String是引用类型那么在内存是怎么划分的呢 我们的name在堆上会指向我们在栈上创建的新对象都是对我们的对象进行操作的。
在java中我们引用起来的也是引用类型我们来证明下。 int sz 12345.length();System.out.println(sz); 我们能对这个字符串.出我们length();方法说明“12345”也是一个引用类型。
2.2String对象的比较
我们在java中肯定会涉及到字符串的比较的那我们该如何去做呢
第一个就是直接用进行比较
什么我们能直接去比吗是的我们在java中对于基础数据类型可以直接用比较他们的值。
而对于引用类型我们比的是他们的地址我们来测试一下 String student1 new String( 小明);String student2 new String( 小明);System.out.println(student1 student2);
我们看到我们创建了两个对象他们字符串的内容都是小明那么他们会输出相等的true吗 答案是不一样的那我们只能去比较字符串的地址怎么才能去比较具体的内容呢我们string类型提供了我们equals方法。
boolean equals(Object anObject)方法按照字典序比较
System.out.println(student1.equals(student2)); 我们看到答案是相同String类重写了我们的equals方法让他每一个字符串按照词典顺序去比较那我们如何忽略大小写去比呢就像我们在网页登录时验证码是忽略大小写的 public static void main(String[] args) {String student1 new String( Hello);String student2 new String( hello);System.out.println(student1 student2);System.out.println(student1.equals(student2));}我们看到用这个方法是做不到的
System.out.println(student1.equalsIgnoreCase(student2));
我们使用这个方法就能忽略大小写对字符串的影响。 我们还可以不返回true和flase我们可以根据字符串比较字母的差值返回对应的数字我们用
compareto方法来实现 public static void main(String[] args) {String a new String(abc);String b new String(abd);System.out.println(a.compareTo(b));} 我们看到返回值为负一第一个字符串小于第二个字符串。
同样我们也可以用compareto来忽略字符串大小写的比较。
public static void main(String[] args) {String a new String(abc);String b new String(abC);System.out.println(a.compareTo(b));System.out.println(a.compareToIgnoreCase(b));} 我们看到第二种方法是已经忽略了字符串大小写了的第一种没有忽略差值正好是32。
2.3字符串查找
char charAt(int index)第一个方法可以返回字符串具体下标的值不能返回越界的下标值。
我们来举例子 String arr new String(Hello);char s arr.charAt(0);System.out.println(s);
我们来访问arr字符串的零下标。 成功访问到了。 String arr new String(Hello);for (int i 0; i arr.length(); i) {char s1 arr.charAt(i);System.out.print(s1);}
我们还可以一个一个访问通循环打出我们的字符串。 int indexOf(int ch)int indexOf(int ch, int fromIndex)我们可以通过index函数来找我们想要的字符或者字符串第一次出现的位置fromlndex我们指定开始寻找的位置我们来举个例子 String name new String(Hello World);System.out.println(name.indexOf(o));System.out.println(name.indexOf(o,5));System.out.println(name.indexOf(ll));System.out.println(name.indexOf(ll,5));
我们可以看到我们找o出现的位置5下标之后o出现的位置ll出现的位置5之后ll出现的位置
运行结果非常明显第一次o出现在4下标,5之后是7下标ll出现在2下标5之后ll并没有出现返回负一。
int lastIndexOf(int ch)我们不光有从前往后找还有从前往后找用法和IndexOf()用法一样。 String name new String(Hello World);System.out.println(name.lastIndexOf(o));System.out.println(name.lastIndexOf(o,5));System.out.println(name.lastIndexOf(ll));System.out.println(name.lastIndexOf(ll,5)); 结果就完全不一样了。
2.4转化
我们在数值和字符串之间也可以发生转换比如我们可以把整数小数布尔类甚至一个对象都转化成字符串我们使用valueOf
我们来尝试下 public static void main(String[] args) {int a 1234;double b 12.34;boolean c true;System.out.println(String.valueOf(a));System.out.println(String.valueOf(b));System.out.println(String.valueOf(c));System.out.println(String.valueOf(new Student(小明,18)));}
还有我们的类
public class Student {public String name;public int age;public Student(String name, int age) {this.name name;this.age age;}public String toString(){return name age;}
}我们试着把这4种类型转化为字符串我们看看是否能成功 我们看到了虽然是输出了但是这到底是不是字符串呢我们加一下试试就知道了。 System.out.println(String.valueOf(a)11);
加上11.我们看看能不能出结果 哎我这是什么答案呢没有相加它实际上变成了一个新的字符串哇那么我们java的字符串就可以直接相加了吗可以但不推荐为啥呢因为太慢了这个过程看似很短但是它设计了很多创建对象的过程并不是直接使用一个对象进行操作所以效率很低下我们后面再讨论怎么解决这个情况
我们把这4种类型转化成了字符串那么怎么把它从字符串转化回来呢
我们可以用包装类 int a Integer.parseInt(1234);double b Double.parseDouble(12.34);boolean c Boolean.parseBoolean(false);System.out.println(a11);System.out.println(b);System.out.println(c); 我们看到结果确实为数字我们可以进行加减
之前提到了字符数组可以转化为字符串而字符串也可以转化为字符数组
我们来进行演示 public static void main(String[] args) {String s new String(Hello World);char[] str s.toCharArray();for (int i 0; i str.length; i) {System.out.print(str[i]);}} 成功转化
在java中依旧保留了c语言格式化输出的特点
比如%d public static void main(String[] args) {String s String.format(%d-%d %d,1,2,3);System.out.println(s);} 我们这样就完成了。
2.字符串替换
我们使用replaceallrepleaceafist, replace,进行字符串指定字符或者单个字符的替换。 String s new String(Hollow Horld);System.out.println(s.replace(H,W));System.out.println(s.replaceAll(o,w));System.out.println(s.replaceFirst(o,ss));} First是代表替换第一次的ALL为全部替换很灵活的函数
2.6字符串拆分
我们还可以进行字符串的拆分通常用到网页网址上的拆分我们继续来举例子 String web new String(student0x123456);String[] Strings web.split();for (int i 0; i Strings.length; i) {System.out.println(Strings[i]);}
我们使用splist函数进行划分传入表示我我们要对左右的进行操作它会把字符串拷贝为两份而不是将之前的字符串一分为二我们将字符串放到数组即可遍历同样我们也可以遍历多个字符串并且特殊的是我们在拆分.|*时都有使用转义字符//进行声明如果是/字符我们要写成。
2.7字符串截取
我们使用substring()进行字符串截取。 String name new String(123425516);String s name.substring(7);System.out.println(s);我们来看结果 从第7个位置截取到最后
2.8其他操作方法
我们还有很多很多的字符串操作方法toUpperCase, toLowerCase,tim()等等·这里就不一一列举了
字符串时不可变的里面的内容无法修改我们之前在距离的时候都是再创建一个字符串所以我们使用StringBulider和StringBuffer进行字符串的修改这里面不仅保留了字符串的功能还有很多的扩展功能这里就不一一列举了。我们下篇文章来讲