String面试题

2023-10-26

如何判断一个字符串中某个字符出现的次数

听到该问题,我脑海中第一反应是先把字符串转换为字符数组,然后使用foreach循环,在循环体内进行字符比对,代码如下所示:

public static void main(String[] args) {
    String str = "ABC123ABC";
    char searchChar = 'B';

    int count = 0;
    char[] charArray = str.toCharArray();
    for (char item : charArray) {
        if (item == searchChar) {
            count++;
        }
    }

    System.out.println("字符" + searchChar + "出现的次数为:" + count);
}
复制代码

输出结果如下所示:

字符B出现的次数为:2

但面试题肯定不会这么简单,紧接着面试官增加了限制条件:

如果不能使用循环,只使用String自己的方法,如何实现呢?

实现方法有很多种,但我推荐使用replace()方法,很好理解,并且高效,代码如下所示:

public static void main(String[] args) {
    String str = "ABC123ABC";
    String searchChar = "B";
    int count = 0;

    int origialLength = str.length();
    str = str.replace(searchChar, "");
    int newLength = str.length();

    count = origialLength - newLength;

    System.out.println("字符" + searchChar + "出现的次数为:" + count);
}
复制代码

而且我觉得,关于面试题:如何判断一个字符串中某个字符出现的次数?,上面这个实现方法才是面试官真正想听到的答案。

如何反转一个字符串

可能很多同学第一时间想到的思路是下面这样的:

public static void main(String[] args) {
    String str = "ABC123ABC";

    StringBuilder stringBuilder = new StringBuilder(str);
    stringBuilder.reverse();

    String newStr = stringBuilder.toString();

    System.out.println("反转前:" + str);
    System.out.println("反转后:" + newStr);
}
复制代码

但我觉得这肯定不是面试官问这个问题的意图,所以我当时的回答是下面这样的:

可以利用数据结构中的栈,因为栈的特点是先入后出(这里可以提一下和队列的不同,队列的特点是先入先出),先把字符串中的每个字符按顺序入栈,再依次出栈,即可实现字符串的反转。

即入栈顺序是:A B C 1 2 3 A B C

而出栈顺序是:C B A 3 2 1 C B A

转换成Java代码是下面这样的:

public static void main(String[] args) {
    String str = "ABC123ABC";

    char[] charArray = str.toCharArray();
    Stack<Character> stack = new Stack<>();
    StringBuilder newStr = new StringBuilder();

    for (char item : charArray) {
        stack.push(item);
    }

    for (int i = 0; i < charArray.length; i++) {
        newStr.append(stack.pop());
    }

    System.out.println("反转前:" + str);
    System.out.println("反转后:" + newStr.toString());
}
复制代码

输出结果如下所示:

反转前:ABC123ABC

反转后:CBA321CBA

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

String面试题 的相关文章

  • 网络安全——cobalt Strike 之office钓鱼

    一 office钓鱼 在无需交互 用户无感知的情况下 执行office文档中内嵌的恶意代码 例如宏 从远控地址中下载并运行恶意可执行程序 例如远控木马 勒索病毒等 cobalt strike office钓鱼原理 主要生成一段vba代码 然
  • 前端发送的form-data类型name=“carNumber“的参数后端怎么接收

    需求 前端将图片和其他信息一起已form data类型发送给后端 图片以二进制流的形式 其他信息以key value的键值对的形式 举例 具体荷载 后端controller层接收的方法 RequestMapping value upload
  • linux安装jdk8

    1 官网下载链接 Java Downloads Oracle 2 下载完成之后 我们打开linux 执行如下命令 最后通过rz命令将文件上传 root localhost local mkdir usr local java root lo
  • android imageloader 进度条,Android-Universal-Image-Loader使用介绍

    图片开源库是一个应用非常广泛的第三方库 几乎所有的应用都会使用 目前而言常见的图片库有 Android Universal Image Loader Picasso Fresco Glide等 下面是国内Top500Android应用分析报
  • Win10笔记本屏幕最低亮度依旧很亮?最高亮度依旧很暗?

    左下角搜索 显卡 打开 英特尔R显卡控制中心 点击 显示器 点击 颜色 里面有 全部颜色 在这里调节即可 嫌太亮 调低些 反之则反
  • 必刷算法题之排序篇(题目及代码)---C++

    前言 该篇博客记录了和排序有关的一些题目 差不多是逐级递增的难度 后续还会补充 有具体思路和代码 文章目录 第一题 排序 第二题 判断字符是否唯一 第三题 最小的k个数 第四题 单链表的排序 第五题 最大数 第六题 调整数组顺序使奇数位于偶
  • javaScript中Float精度计算

    在项目中做了一个计算统计值的部分 实现过程是通过 javaScript 进行累加的 在测试时出现了一个很乖的问题 在此记录一下 1 问题背景 项目中有一个表格字段 数据类型是float的 在数据库中均以Decimal 10 2 的格式保存
  • springMVC(数据格式化+验证以及国际化+中文乱码处理+处理 json 和 HttpMessageConverter<T>+SpringMVC 文件上传+自定义拦截器+异常处理)

    目录 一 数据格式化 1 基本介绍 2 基本数据类型和字符串自动转换 2 1总结 3 特殊数据类型和字符串间的转换 二 验证以及国际化 1 概述 1 1 概述 2 JSR 303 验证框架 1 1Hibernate Validator 扩展
  • layui.table.render如何改变表格的高度

    1 将checkbox 和 操作 设置固定高度 type checkbox fixed left style height 111px field id title ID sort true width 120 fixed right ti
  • 数据结构:排序(Sort)【详解】

    目录 排序 知识框架 排序概述 一 排序的相关定义 二 排序用到的结构与函数 常见的排序算法 一 冒泡排序 交换排序 1 算法 2 性能分析 二 简单选择排序 1 算法 2 性能分析 三 直接插入排序 1 算法 2 性能分析 四 折半插入排
  • 【xenclient】 使用小结 -- 片花

    片花1 磁盘共享 同一台电脑上装的系统多了 各个系统间难免重复内容很多 不免就有共享的需求 最简单的想法 单独做个vhd 只用来保存共享的数据 然后加到每一个虚拟机上 不就行了 当然 同一块vhd挂到多台虚拟机上 同时运行的话肯定有数据一致
  • 超详细的Shell学习教程第一篇

    1 1 Shell介绍 Shell 是一个用 C 语言编写的程序 它是用户使用 Linux 的桥梁 Shell 既是一种命令语言 又是一种程序设计语言 Shell 是指一种应用程序 这个应用程序提供了一个界面 用户通过这个界面访问操作系统内
  • 【100+ python基础入门-32】元组元素的增删改查操作方法总结

    元组是不可变的数据类型 所以我们没有办法对他的内部元素进行诸如修改 删除和增加操作 但是语言就是这么神奇 不可以对元祖本身操作 还可以把元组操作之后的结果重新存储成一个新的元组 这样不就能丰富元组的操作了吗 方法是完全可行的 但是多少有点局
  • LinkedList和ArrayList

    LinkedList和ArrayList 区别 LinkedList是基于双向链表 头尾插入删除效率高 随机访问慢 要沿着链表一个一个遍历 占用内存多 ArrayList是基于数组 尾部插入 删除性能还行 其他部分插入 删除都会一个一个移动
  • 远程桌面很卡

    很多人使用windows自带的远程桌面连接的时候 会觉得很卡 这很可能是你网速慢的原因 你可以试试用提高网速的方法来解决这个问题 下面我教大家调整一下远程桌面连接的显示 可能是你把远程的画质设置得过高 占用了宽带 所以导致了在远程的时候变得
  • Zabbix监控之邮件发送失败-smtp-server: 错误代码550与535

    原始问题背景 前几天运维同事突然发现zabbix监控上面不再发送邮件了 而zabbix的监控界面状态都是能够显示出来 因为之前出现过类似的问题 估计是163邮箱的问题 于是登陆用于告警的邮箱 直接通过网页发送邮件也同样报错 估计是邮件防垃圾
  • 股票实时行情数据API接口分享

    JAVA版本API接口分享 import java io BufferedReader import java io IOException import java io InputStreamReader import java net
  • Python 比较两个时间序列在图形上是否相似

    比较两个时间序列在图形上是否相似 可以通过以下方法 可视化比较 将两个时间序列绘制在同一张图上 并使用相同的比例和轴标签进行比较 可以观察它们的趋势 峰值和谷值等特征 从而进行比较 峰值和谷值比较 通过比较两个时间序列中的峰值和谷值来进行比

随机推荐

  • 认识smack4.1.4基本对象——StanzaFilter接口

    一StanzaFilte接口介绍 该接口通过定义方法过滤packet对象中的特殊属性 该接口主要用于创建packet的监听器 listener 和收集器 collector 通过StanzaFilte对监听器和收集器需要处理的packet进
  • 组合预测模型

    组合预测模型 LSTM XGBoost长短期记忆神经网络结合极限梯度提升树时间序列预测 Matlab程序 目录 组合预测模型 LSTM XGBoost长短期记忆神经网络结合极限梯度提升树时间序列预测 Matlab程序 预测结果 评价指标 基
  • [History]W. Richard Stevens

    读过 Advanced Programming in the UNIX Enviroment 读过 TCP IP Illustrated 读过 UNIX Network Programming 直到今天才直到她们的作值是同一个人 W Ric
  • pycharm使用小技巧-插入代码/默认模板

    每次用pycharm写代码的时候前面几行代码都要重复写 作为一名新生代民工 对于这种重复性工作当然是能省略就省略的了 未设置前 我们新建一python文件都是空白的 如下图 而设置好之后的样子如下 新建之后便是我们想要的模板 设置步骤如下
  • MyBatis中${} 和 #{} 有什么区别?

    和 都是 MyBatis 中用来替换参数的 它们都可以将用户传递过来的参数 替换到 MyBatis 最终生成的 SQL 中 但它们区别却是很大的 接下来我们一起来看 1 功能不同 是将参数直接替换到 SQL 中 比如以下代码 最终生成的执行
  • 鲍鱼数据集数据分析和可视化,线性回归预测鲍鱼年龄(基于TensorFlow)

    一 数据集描述 Name Data Type Meas Description Sex nominal M F and I infant Length continuous mm Longest shell measurement Diam
  • 详解·高通Vuforia识别追踪3D物体/模型,Unity开发

    研究这个问题的初衷 1 公司要做一个识别3D物体的案例 参考了各个平台 发现EasyAR和Vuforia支持3D物体识别与追踪 2 刚开始用EasyAR做 但做了一半发现有一定的限制 1 必须Pro版本的EA插件才能支持3D物体识别与追踪
  • 简单电子产品的蓝牙电路设计和PCB设计

    最近做的项目中的电子产品都有用到蓝牙模块 所以简单来讲一讲 在原理图设计时 需要在天线与模块射频输出管脚预留一个 型网络 天线的阻抗受PCB的铺地 天线的安装以及周围的金属等因素影响 预留这个网络是为了在天线严重偏离50欧姆阻抗时 将其匹配
  • (AcWing)高精度乘法

    给定两个非负整数 不含前导 00 AA 和 BB 请你计算 A BA B 的值 输入格式 共两行 第一行包含整数 AA 第二行包含整数 BB 输出格式 共一行 包含 A BA B 的值 数据范围 1 A的长度 1000001 A的长度 10
  • [计算机网络] HTTP协议

    计算机网络 HTTP协议 文章目录 计算机网络 HTTP协议 一 工作方式 二 HTTP报文详解 1 请求报文 1 1 报文结构 1 2 组成1 请求行 1 3 组成2 请求头 1 4 组成3 请求体 1 5 总结 2 响应报文 2 1 状
  • Fiddler抓包工具(手机使用)

    一 参数配置 1 启动Fiddler 打开菜单栏中的Tools gt Options 打开 Options 对话框 2 在 Options 对话框切换到 HTTPS 选项卡 然后勾选 Decrypt HTTPS traffic 后面的复选框
  • EndNote使用手册(无图版)

    含图笔记在有道云笔记中 https note youdao com s E1MiEzk8 文章目录 1 软件安装 2 EndNote软件界面 2 1 设置Library 2 2 导入文献 3 文献管理 3 1 文献分组 3 2 查看文献原文
  • conda install nb_conda出错

    问题 conda install nb conda 一直solving environment 或者显示http400 换成pip install notebook 依旧不行 换成其他源 亲测此时中科大源有效 清华 https pypi t
  • 程序员接私活的6个网站,你有技术就有钱!

    点击上方 Python高校 关注 未未干货立马到手 作者 发哥 链接 GitHubDaily 本篇文章会向大家推荐国内外几个接外包比较靠谱的平台 主旨是贵精不贵多 因此 像 猪x戒 这种会让程序员自贬身价 扰乱市场规则的网站 便不会出现在下
  • 标准的产品设计工作流程

    每个产品团队都会有自己的工作流程 无论这个工作流程是否最高效 是否体现最大价值 但是我认为只要这个流程能够为实现工作目标提供过程的保障就可以算是好的流程 对于流程本身而言 可以因团队不同或工作任务不同而有差异 一个成熟度的产品团队可以在保证
  • 阿里云服务器无法外网访问的坑

    最近各大平台在促销云服务器 于是买了阿里云的window 10服务器 于是坑来了 简单安装nginx后 以为像其他服务器一样 公网IP访问就 了 没想到搞了好久 最后发现如下帖子 https www cnblogs com kekelele
  • 学习笔记-Midjourney的关键词详解

    大家好啊 我是了不起 前一段时间ChatGPT突然火爆 大佬们纷纷下场 我也跟着努力学习 做了一些笔记 下面将陆续放出笔记 共享给小伙伴们 这是放出的第七篇 和小伙伴们与时俱进哈 Midjourney 关键词详解 为了方便小伙伴们能够更好的
  • 每天一个Python基础编程题——九九乘法表

    请用for循环打印出九九乘法表 上三角 for low in range 1 10 for row in range 1 low 1 print lt 2 format row low low row end print
  • (Mac)如何下载、安装并注册VMware Fusion虚拟机软件(Mac专用)

    写在前面 前一阵子写了一篇关于 如何下载 安装并注册VMware Workstation Pro虚拟机软件 的文章 但是有一部分用户用的是Mac 发现没有VMware Workstation Pro的Mac版本 还不愿意用价格更昂贵的pd
  • String面试题

    如何判断一个字符串中某个字符出现的次数 听到该问题 我脑海中第一反应是先把字符串转换为字符数组 然后使用foreach循环 在循环体内进行字符比对 代码如下所示 public static void main String args Str