【Java】 字符串处理----《实验楼》练习题

在/home/project/目录下新建StringUtil.java,你需要实现以下需求:

1.从控制台输入一行字符串
2.去除字符串中的所有空格
3.打印去除空格后的字符串

示例:

输入: shi ya n lou 输出: shiyanlou

提示:java.util.Scanner可以获取控制台输入。

Scanner in =new Scanner(System.in); //获取String值 String a=in.nextLine();

参考代码:

import java.util.Scanner; public class StringUtil { public static void main(String[] args) { Scanner in =new Scanner(System.in);//创建一个Scanner对象 String a=in.nextLine();//获取String值 StringBuilder stringBuilder = new StringBuilder(a);//用StringBuilder比String好用,操作性更强 for (int i = 0; i < stringBuilder.length(); i++) { if (stringBuilder.charAt(i)==' ') { stringBuilder.deleteCharAt(i); i--; }else { stringBuilder.charAt(i); } } System.out.println(stringBuilder.toString()); } }

结果:
在这里插入图片描述

存在的知识点


public char charAt(int index)

返回处于index位置上的字符,index的范围是[0,s.length()-1],字符串中的第一个字符位于index 0上,下一个字符位于index 1上,并以此类推,类似于数组下标索引。这个方法接收一个下标仵为其参数,返回字符串中处在该下标位置的字符。第一个字符在0位置,最后一个字符在长度减1的位置。


字符串常用处理方法

1、获取字符串的长度
length()
2 、判断字符串的前缀或后缀与已知字符串是否相同
前缀 startsWith(String s)
后缀 endsWith(String s)
3、比较两个字符串
equals(String s)
4、把字符串转化为相应的数值
int 型 Integer.parseInt(字符串)
long 型 Long.parseLong(字符串)
float 型 Folat.valueOf(字符串).floatValue()
double 型 Double.valueOf(字符串).doubleValue()
5、将数值转化为字符串
valueOf(数值)
6、字符串检索
indexOf(Srting s) 从头开始检索
indexOf(String s ,int startpoint) 从startpoint 处开始检索
如果没有检索到,将返回-1
7、得到字符串的子字符串
substring(int startpoint) 从startpoint 处开始获取
substring(int start,int end) 从start 到end 中间的字符
8、替换字符串中的字符,去掉字符串前后空格
replace(char old,char new) 用new 替换old
trim()


关于spilt定义和用法

split() 方法用于把一个字符串分割成字符串数组。

语法

stringObject.split(separator,howmany)

参数 描述
separator

必需。字符串或正则表达式,从该参数指定的地方分割 stringObject。

howmany

可选。该参数可指定返回的数组的最大长度。如果设置了该参数,返回的子串不会多于这个参数指定的数组。如果没有设置该参数,整个字符串都会被分割,不考虑它的长度。

返回值

一个字符串数组。该数组是通过在 separator 指定的边界处将字符串 stringObject 分割成子串创建的。返回的数组中的字串不包括 separator 自身。

但是,如果 separator 是包含子表达式的正则表达式,那么返回的数组中包括与这些子表达式匹配的字串(但不包括与整个正则表达式匹配的文本)。

提示和注释

注释:如果把空字符串 ("") 用作 separator,那么 stringObject 中的每个字符之间都会被分割。


Java Scanner类

(以下内容部分取自菜鸟教程网站)

java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入。

下面是创建 Scanner 对象的基本语法:

Scanner s = new Scanner(System.in);

并通过 Scanner 类的 next() 与 nextLine() 方法获取输入的字符串,在读取前我们一般需要 使用 hasNext 与 hasNextLine 判断是否还有输入的数据

使用next方法:

import java.util.Scanner; public class ScannerDemo { public static void main(String[] args) { Scanner scan = new Scanner(System.in); // 从键盘接收数据 // next方式接收字符串 System.out.println("next方式接收:"); // 判断是否还有输入 if (scan.hasNext()) { String str1 = scan.next(); System.out.println("输入的数据为:" + str1); } scan.close(); } }

nextline方法:

import java.util.Scanner; public class ScannerDemo { public static void main(String[] args) { Scanner scan = new Scanner(System.in); // 从键盘接收数据 // nextLine方式接收字符串 System.out.println("nextLine方式接收:"); // 判断是否还有输入 if (scan.hasNextLine()) { String str2 = scan.nextLine(); System.out.println("输入的数据为:" + str2); } scan.close(); } }

next() 与 nextLine() 区别

next():

1、一定要读取到有效字符后才可以结束输入。
2、对输入有效字符之前遇到的空白,next() 方法会自动将其去掉。
3、只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
next() 不能得到带有空格的字符串

nextLine():

1、以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符。
2、可以获得空白。
如果要输入 int 或 float 类型的数据,在 Scanner 类中也有支持,但是在输入之前最好先使用 hasNextXxx() 方法进行验证,再使用 nextXxx() 来读取。

scan.close();作用

使用scanner(system.in)时,使用完毕后,一定要关闭扫描器,因为system.in属于IO流,一旦打开,它一直在占用资源,因此使用完毕后切记要关闭。

scan.hasNext();作用

hasNext()这个方法是如果此扫描器的输入中有另一个标记则返回 true。在等待要扫描的输入时,此方法可能阻塞。扫描器将不执行任何输入。所以循环会一直下去。
你可以设置一个终止符,调用hasNext()的重载方法hasNext(String patten):如果下一个标记与从指定字符串构造的模式匹配,则返回 true。扫描器不执行任何输入。
例:以输入"0",结束输出

Scanner sc = new Scanner(System.in); while (!sc.hasNext("0")) { System.out.println(sc.next()); }

String和StringBuilder的区别

String类是不可变类,即一旦一个String对象被创建以后,包含在这个对象中的字符序列是不可改变的,直至这个对象被销毁。
初次赋值后,再次赋值时,并不是对原来堆中实例对象进行重新赋值,而是生成一个新的实例对象,并且指向最新生成的实例对象,之前的实例对象仍然存在,如果没有被再次引用,则会被垃圾回收。

StringBuffer对象则代表一个字符序列可变的字符串,当一个StringBuffer被创建以后,通过StringBuffer提供的append()、insert()、reverse()、setCharAt()、setLength()等方法可以改变这个字符串对象的字符序列。一旦通过StringBuffer生成了最终想要的字符串,就可以调用它的toString()方法将其转换为一个String对象。

StringBuilder strB = new StringBuilder();

1、append(String str)/append(Char c):字符串连接
System.out.println(“StringBuilder:”+strB.append(“ch”).append(“111”).append(‘c’));
//return “StringBuilder:ch111c”

2、toString():返回一个与构建起或缓冲器内容相同的字符串
System.out.println(“String:”+strB.toString());
//return “String:ch111c”

3、appendcodePoint(int cp):追加一个代码点,并将其转换为一个或两个代码单元并返回this
System.out.println(“StringBuilder.appendCodePoint:”+strB.appendCodePoint(2));
//return “StringBuilder.appendCodePoint:ch111c”

4、setCharAt(int i, char c):将第 i 个代码单元设置为 c(可以理解为替换)
strB.setCharAt(2, ‘d’);
System.out.println(“StringBuilder.setCharAt:” + strB);
//return “StringBuilder.setCharAt:chd11c”

5、insert(int offset, String str)/insert(int offset, Char c):在指定位置之前插入字符(串)
System.out.println(“StringBuilder.insertString:”+ strB.insert(2, “LS”));
//return “StringBuilder.insertString:chLSd11c”
System.out.println(“StringBuilder.insertChar:”+ strB.insert(2, ‘L’));
//return “StringBuilder.insertChar:chLLSd11c”

6、delete(int startIndex,int endIndex):删除起始位置(含)到结尾位置(不含)之间的字符串
System.out.println(“StringBuilder.delete:”+ strB.delete(2, 4));
//return “StringBuilder.delete:chSd11c”

另:delete方法与deleteCharAt两个方法都是用来删除StringBuffer字符串指定索引字符的方法,

delete(int a,int b)有两个参数,使用时删除索引从a开始(包含a)到b(不包含b)的所有字符;

deleteCharAt(int a)只有一个参数,使用时删除索引为a的字符


__EOF__

本文作者坤舆小菜鸡
本文链接https://www.cnblogs.com/HBU-xuhaiyang/p/17223210.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   坤舆小菜鸡  阅读(31)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示