java学习心得
字符串输入区别
// 创建Scanner对象,用于读取标准输入(System.in) Scanner scanner = new Scanner(System.in);
读取包括空格 nextline,读取一整行
// 使用nextLine()方法读取一行字符串,包括空格 String inputString = scanner.nextLine();
遇到空格就会结束
// 使用next()方法读取一个单词 String word = scanner.next();
字符串
在字符串中跟c++还是有区别的,首先c++的字符串是数组,不能像访问数组的下标显示而是通过charAt
-
所以访问字符串的位置就用
charAt
-
字符串转换为字符数组
toCharArray
[字符串是不能变动的所以就要转换为字符数组]
3.字符串转换为大小写
-
转换为大写:使用
toUpperCase()
方法。 -
转换为小写:使用
toLowerCase()
方法。
String original = "AncdAfAf"; // 转换为大写 String upperCase = original.toUpperCase(); System.out.println("大写: " + upperCase); // 转换为小写 String lowerCase = original.toLowerCase(); System.out.println("小写: " + lowerCase);
4.字符串的替换和去除空格操作
replace()
方法
String str = "Hello World"; String noSpaces = str.replace(' ', '_'); System.out.println(noSpaces); // 输出 "Hello___World"
5:字符串的判断操作
equals(Object anObject)
判断当前字符串是否与另一个对象相等
,这里的相等是指内容完全相同。
String str1 = "hello"; String str2 = "hello"; boolean isEqual = str1.equals(str2); // true
isEmpty()
判断字符串是否为空(长度为0)。
String str = ""; boolean isEmpty = str.isEmpty(); // true
startsWith(String prefix)
判断字符串是否以指定的前缀开始。
String str = "Hello World"; boolean startsWithHello = str.startsWith("Hello"); // true
endsWith(String suffix)
判断字符串是否以指定的后缀结束。
String str = "Hello World"; boolean endsWithWorld = str.endsWith("World"); // true
contains(CharSequence s)
判断字符串是否包含指定的字符序列。
String str = "Hello World"; boolean containsHello = str.contains("Hello"); // true
StringBuilder
StringBuilder是Java中用于构建和操作字符串的一个高效类,尤其在需要频繁修改字符串内容的场合下,使用StringBuilder比使用String类更加高效,因为String是不可变的,每次修改都会创建一个新的字符串对象,而StringBuilder则是在原有对象上进行修改。以下是StringBuilder的一些基本用法:
StringBuilder sb = new StringBuilder(); // 创建一个空的StringBuilder对象 StringBuilder sb2 = new StringBuilder("Hello"); // 创建一个初始值为"Hello"的StringBuilder对象 StringBuilder sb3 = new StringBuilder(50); // 创建一个容量为50的StringBuilder对象
常用方法
append()
用于向StringBuilder对象的末尾添加各种类型的数据。
StringBuilder sb = new StringBuilder(); sb.append("Hello "); sb.append("World"); sb.append(123); System.out.println(sb); // 输出: Hello World123
insert()
在指定位置插入字符串或其他类型的数据。
StringBuilder sb = new StringBuilder("Hello World"); sb.insert(5, "Java "); System.out.println(sb); // 输出: HelloJava World
delete()
删除指定范围内的字符。
StringBuilder sb = new StringBuilder("Hello World"); sb.delete(6, 11); System.out.println(sb); // 输出: HelloWorld
replace()
替换指定范围内的字符。
StringBuilder sb = new StringBuilder("Hello World"); sb.replace(6, 11, "Java"); System.out.println(sb); // 输出: Hello Java
reverse()
反转字符串中的字符顺序。
StringBuilder sb = new StringBuilder("Hello World"); sb.reverse(); System.out.println(sb); // 输出: dlroW olleH
toString()
将StringBuilder对象转换成String对象。
StringBuilder sb = new StringBuilder("Hello World"); String str = sb.toString(); System.out.println(str); // 输出: Hello World
为什么要将stringbuilder转换为string类型的?
-
最终输出: 当你完成了对字符串的构建和修改,并且不再需要进一步的修改时,通常会将其转换为String对象。这是因为String是不可变的,这使得它在作为参数传递给方法、存储在集合中或者作为键在映射中使用时更安全和高效。
-
兼容性: 许多API和框架期望接收String类型的参数,而不是StringBuilder。例如,当你需要将构建好的字符串传递给一个只接受String参数的方法时,就需要进行转换。
-
数据持久化: 如果你需要将字符串写入文件、数据库或网络传输,通常会使用String,因为大多数持久化层和网络协议都支持String类型。
-
性能优化: 在某些情况下,虽然StringBuilder提供了更好的性能用于构建和修改字符串,但在字符串构建完成后,转换为String可以避免不必要的内存占用,因为StringBuilder可能保留了内部缓冲区的空间。
-
线程安全: StringBuilder本身不是线程安全的,而String是不可变的,因此在多线程环境中更安全。如果你的字符串将在多个线程之间共享,转换为String可以防止意外的并发修改。
链式编程
public class StringBuilderDemo4 { public static void main(String[] args) { //1.创建对象 StringBuilder sb = new StringBuilder(); //2.添加字符串 sb.append("aaa").append("bbb").append("ccc").append("ddd"); System.out.println(sb);//aaabbbcccddd //3.再把StringBuilder变回字符串 String str = sb.toString(); System.out.println(str);//aaabbbcccddd } }
场景使用字符串
首先字符串是不能改变的,字符串进行拼接各种操作
public static void main(String[] args) { //1.键盘录入一个字符串 Scanner sc = new Scanner(System.in); System.out.println("请输入一个字符串"); String str = sc.next(); //2.反转键盘录入的字符串 String result = new StringBuilder().append(str).reverse().toString(); 这里就是创建一个字符串StringBuilder然后再进行各种字符串的操作然后.tostring() //3.比较 if(str.equals(result)){ System.out.println("当前字符串是对称字符串"); }else{ System.out.println("当前字符串不是对称字符串"); } }
public static void main(String[] args) { //1.定义数组 int[] arr = {1,2,3}; //2.调用方法把数组变成字符串 String str = arrToString(arr); System.out.println(str); } public static String arrToString(int[] arr){ StringBuilder sb = new StringBuilder(); sb.append("["); for (int i = 0; i < arr.length; i++) { if(i == arr.length - 1){ sb.append(arr[i]); }else{ sb.append(arr[i]).append(", "); } } sb.append("]"); return sb.toString(); }
集合
ArrayList类是Java集合框架中的一个重要组成部分,它实现了List接口,提供了一种基于动态数组的列表实现。下面是关于ArrayList类的一些关键概述:
public class ArrayListExample { public static void main(String[] args) { // 创建一个空的ArrayList List<String> list = new ArrayList<>(); // 添加元素 list.add("Apple"); list.add("Banana"); list.add("Cherry"); // 输出整个列表 System.out.println("Original list: " + list); // 访问列表中的元素 String secondItem = list.get(1); System.out.println("Second item: " + secondItem); // 修改列表中的元素 list.set(1, "Blueberry"); System.out.println("Updated list: " + list); // 在指定位置插入元素 list.add(1, "Grape"); System.out.println("List after insertion: " + list); // 删除列表中的元素 list.remove("Grape"); System.out.println("List after deletion: " + list); // 删除指定位置的元素 list.remove(1); System.out.println("List after removing at index 1: " + list); // 遍历列表 System.out.println("Iterating over the list:"); for (String fruit : list) { System.out.println(fruit); } // 检查列表是否包含某个元素 boolean containsApple = list.contains("Apple"); System.out.println("Does the list contain 'Apple'? " + containsApple); // 获取列表的大小 int size = list.size(); System.out.println("Size of the list: " + size); // 清空列表 list.clear(); System.out.println("List after clear: " + list); }
这段代码展示了如何使用ArrayList进行基本操作,包括创建、添加、访问、修改、删除元素,以及遍历列表。通过这些操作,你可以看到ArrayList在Java编程中的灵活性和实用性。
ArrayList存储字符串并遍历
创建一个存储字符串的集合,存储3个字符串元素,使用程序实现在控制台遍历该集合
for (int i = 0; i < list.size(); i++) { //i 依次表示集合里面的每一个索引 if(i == list.size() - 1){ //最大索引 System.out.print(list.get(i)); }else{ //非最大索引 System.out.print(list.get(i) + ", "); } }