Java集合类ArrayList应用 | 如何在字符串s1中删除有在字符串s2出现的字符?

news/2024/11/23 0:51:15/

目录

一、题干

二、题解

1. 思路

ArrayList实现

2. 代码

ArrayList实现

StringBuilder实现-1

StringBuilder实现-2

三、总结


一、题干

面试的编程题:
s1: "welcome to Zhejiang"
s2: "come"
要求输出从字符串s1删除s2中存在的字符之后的结果。如运行后,输出:"wl t Zhjiang"


二、题解

1. 思路

ArrayList实现

这道题的思路并不复杂,要从s1中删除s2中存在的字符,只需要遍历字符串s1的每个字符,依次对比它是否在s2中出现。出现了的删去,没有出现的留下。如何运用集合类ArrayList进行实现呢?可能也不难想到,只需将s1中需要留下的字符存入顺序表即可。

在编写代码时,其中有一些细节需要我们注意:

  1. 由于是将需要留下的字符存入ArrayList中,因此在实例化ArrayList时,应当采取泛型类ArrayList<Character>:
    ArrayList<Character> list = new ArrayList<>();
  2. 检查s2中是否包含s1的字符,调用字符串方法contains()即可。但要注意,若写作s2.contains(ch)是不正确的(ch是char类型)。因为contains()方法的参数类型为CharSequence,与char类型是不匹配的。

因此,每次使用字符串类的contains()方法前,必须要先将待查找的char字符转换成CharSequence类型。在本文文末补充了CharSequence相关的知识。 CharSequence实际上是一个接口,而String类就实现了这个接口。因此,通过ch+""或String.valueOf(ch)将char类型转换为String类型即可。

该方法的本质就是创建一个新的空间(可以是ArrayList类型,也可以是普通的char数组),也可以用StringBuilder类型实现。下面代码中的StringBuilder实现-1与StringBuilder实现-2即为对应的代码。


2. 代码

ArrayList实现

import java.util.ArrayList;public class Test {public static void main(String[] args) {ArrayList<Character> list = new ArrayList<>();String s1 = "welcome to Zhejiang";String s2 = "come";for (int i = 0; i < s1.length(); i++) {char ch = s1.charAt(i);if(!s2.contains(String.valueOf(ch))) {list.add(ch);}}//System.out.println(list);  打印出的格式不符合要求for (int i = 0; i < list.size(); i++) {System.out.print(list.get(i));}}
}

StringBuilder实现-1

public class Test {public static void main(String[] args) {String s1 = "welcome to Zhejiang";String s2 = "come";StringBuilder ret = new StringBuilder();for (int i = 0; i < s1.length(); i++) {char ch = s1.charAt(i);if(!s2.contains(String.valueOf(ch))) {ret.append(ch);    //StringBuilder的追加方法}}for (int i = 0; i < ret.length(); i++) {System.out.print(ret.charAt(i));}}
}

StringBuilder实现-2

import java.util.ArrayList;public class Test {public static void main(String[] args) {ArrayList<Character> list = new ArrayList<>();String s1 = "welcome to Zhejiang";String s2 = "come";StringBuilder stringBuilder = new StringBuilder(s1);    //创建一个内容与s1相同的stringbuilder类,该代码对它来说是原地的for (int i = 0; i < stringBuilder.length(); i++) {char ch = stringBuilder.charAt(i);if(s2.contains(String.valueOf(ch))) {stringBuilder.deleteCharAt(i);i--;}}System.out.println(stringBuilder);}
}

三、总结

  1. 本题难度并不大,初学集合类或对集合类不太熟悉的同学可以浏览学习一下,从易到难了解Java集合类的各种方法以及相关应用。
  2. 本题的实现方法有很多,本文列举了用StringBuilder类实现的另两种方式,主要熟悉append()方法与deleteCharAt()方法的使用。
  3. 知识点补充:Interface CharSequence


http://www.ppmy.cn/news/9635.html

相关文章

【Java寒假打卡】Java基础-BigDecimal

【Java寒假打卡】Java基础-BigDecimal构造方法四则运算BigDecimal的特殊方法基本数据类型包装类自动装箱与自动拆箱Integer的类型转换将数字字符串进行拆分成整数数组构造方法 package com.hfut.edu.test1;import java.math.BigDecimal;public class test3 {public static void…

Spring AOP 面向切面编程

1.AOP是什么我们之前学过 OOP 面向对象编程, 那么 AOP 是否就比 OOP 更牛逼呢? 是否也是面向过程到面向对象这种质的跨越呢? 其实不是, 它和 OOP 思想是一种互补的关系, 是对 OOP 思想的一种补充.AOP (Aspect Oriented Programming) : 面向切面编程, 它是一种思想, 它是对某一…

3台机器配置hadoop集群_Hadoop+Hbase 分布式集群架构

安装搭建Hadoop1、 配置说明本次集群搭建共三台机器&#xff0c;具体说明下&#xff1a;主机名IP说明nn01192.168.1.51DataNode、NodeManager、ResourceManager、NameNodedn01192.168.1.52DataNode、NodeManager、SecondaryNameNodedn02192.168.1.53DataNode、NodeManager2 、安…

【二分查找】有界数组中指定下标处的最大值

题目描述 给你三个正整数 n、index 和 maxSum 。你需要构造一个同时满足下述所有条件的数组 nums&#xff08;下标 从 0 开始 计数&#xff09;&#xff1a; nums.length nnums[i] 是 正整数 &#xff0c;其中 0 < i < nabs(nums[i] - nums[i1]) < 1 &#xff0c;其…

论文投稿指南——中文核心期刊推荐(生物科学)

【前言】 &#x1f680; 想发论文怎么办&#xff1f;手把手教你论文如何投稿&#xff01;那么&#xff0c;首先要搞懂投稿目标——论文期刊 &#x1f384; 在期刊论文的分布中&#xff0c;存在一种普遍现象&#xff1a;即对于某一特定的学科或专业来说&#xff0c;少数期刊所含…

三维数学(二)

欧拉角 使用物体在三个旋转轴上的旋转角度来保存方位 API&#xff1a; Transform.eulerAngles&#xff1a;返回或设置物体的欧拉角 优点&#xff1a; 1.仅使用三个数字表达方位&#xff0c;占用空间小 2.沿坐标轴旋转的单位为角度&#xff0c;符合人的思考方式 3.任意…

JavaScript 错误

文章目录JavaScript 错误 - throw、try 和 catchJavaScript 错误JavaScript 抛出&#xff08;throw&#xff09;错误JavaScript try 和 catchThrow 语句实例实例JavaScript 错误 - throw、try 和 catch try 语句测试代码块的错误。 catch 语句处理错误。 throw 语句创建自定义错…

循环神经网络-高级篇RNN Classifier

循环神经网络-高级篇RNN Classifier 本篇实现一个循环神经网络的分类器RNN Classifier 我们使用一个数据集包含Name&#xff0c;Country&#xff0c;其中名字有几千个&#xff0c;来自18个不同的国家&#xff0c;我们的目标是训练一个模型&#xff0c;可以实现输入一个名字&a…