力扣Lc17--- 345.反转字符串中的元音字母(java版)-2024年3月18日

1.题目
在这里插入图片描述
2.知识点
注1:
indexOf() 是 Java 中 String 类的方法之一,它用于查找指定字符或字符串在字符串中第一次出现的位置。如果找到了该字符或字符串,则返回它在字符串中的索引位置(从0开始),如果没有找到,则返回-1。
注2:
1)indexOf(int ch):用于查找指定字符(Unicode码)在字符串中第一次出现的位置。如果找到了该字符,则返回它在字符串中的索引位置(从0开始),如果没有找到,则返回-1。

示例:

String str = "hello";
int index = str.indexOf('e');
System.out.println(index); // 输出:1

2)indexOf(String str):用于查找指定字符串在当前字符串中第一次出现的位置。如果找到了该字符串,则返回它在字符串中的索引位置(从0开始),如果没有找到,则返回-1。

示例:

String str = "hello";
int index = str.indexOf("lo");
System.out.println(index); // 输出:3

区别1:
valueOf() 是 Java 中许多类的静态方法,用于将其他类型的数据转换为字符串表示形式。

String 类中,valueOf() 方法有多个重载形式:valueOf(boolean b):将布尔值转换为字符串。valueOf(char c):将字符转换为字符串。valueOf(char[] data):将字符数组转换为字符串。valueOf(char[] data, int offset, int count):将字符数组的一部分转换为字符串。valueOf(int i):将整数转换为字符串。valueOf(long l):将长整型数转换为字符串。valueOf(float f):将浮点数转换为字符串。valueOf(double d):将双精度浮点数转换为字符串。valueOf(Object obj):将对象转换为字符串,调用该对象的 toString() 方法。
int num = 42;
String str = String.valueOf(num);
//将整数 42 转换为字符串 "42"。

3.思路和例子
(1)字符串反转就是类似交换 先定义左右指针,当左指针小于右指针的时候,两数就进行交换
(2)
StringBuilder 是 Java 中用于构建字符串的可变对象。它允许你有效地构建和修改字符串,而无需每次修改都创建一个新的字符串对象,这样可以节省内存并提高性能。

在代码中,StringBuilder sb = new StringBuilder(); 创建了一个空的 StringBuilder 对象,你可以使用它来构建最终的字符串结果。通过 StringBuilder 的 append() 方法,你可以向其中追加字符、字符串或其他数据类型的值,然后通过 toString() 方法将 StringBuilder 对象转换为最终的字符串。

在这个具体的例子中,你可以看到 StringBuilder 用于构建反转后的字符串结果。你可以通过 sb.append(…) 方法来将反转后的字符逐个追加到 StringBuilder 中,最后通过 sb.toString() 方法获取构建好的字符串。
例子1:
当我们使用 StringBuilder 时,通常会追加字符、字符串或其他数据类型的值,并最终获取构建好的字符串。以下是一个示例,演示了如何使用 StringBuilder 构建一个字符串,将一组数字以逗号分隔开:
在这个例子中,我们首先创建了一个空的 StringBuilder 对象 sb。然后,我们遍历整数数组 numbers,将每个数字逐个追加到 StringBuilder 中。在追加数字时,我们检查当前数字是否是数组的最后一个元素,如果不是,就在数字后面追加逗号分隔符。最后,我们使用 sb.toString() 获取构建好的字符串,并将其输出。

import java.util.*;public class Example {public static void main(String[] args) {// 假设有一个整数数组int[] numbers = {1, 2, 3, 4, 5};// 创建一个 StringBuilder 对象StringBuilder sb = new StringBuilder();// 遍历整数数组,将每个数字追加到 StringBuilder 中for (int i = 0; i < numbers.length; i++) {// 追加当前数字sb.append(numbers[i]);// 如果不是最后一个数字,追加逗号分隔符if (i < numbers.length - 1) {sb.append(", ");}}// 获取构建好的字符串String result = sb.toString();// 输出结果System.out.println(result);}
}

(3)
在Java中,StringBuilder 类的构造函数可以接受多种类型的参数来初始化 StringBuilder 对象。其中一个重要的构造函数接受一个字符串作为参数,这个字符串会被复制到新的 StringBuilder 对象中。

所以,当我们使用 StringBuilder sb = new StringBuilder(s); 这种形式时,我们是在构造一个新的 StringBuilder 对象,该对象的初始内容是字符串 s 的内容。这意味着我们在构造 StringBuilder 对象的同时,会将字符串 s 的内容复制到新的 StringBuilder 对象中。

使用 StringBuilder sb = new StringBuilder(); 这种形式时,我们是在构造一个空的 StringBuilder 对象,没有传入任何初始内容。这种情况下,StringBuilder 对象会初始化为空,我们可以后续通过 append() 方法来逐步添加内容。

所以,根据需要选择使用不同的构造函数形式来初始化 StringBuilder 对象。

(4)将字符数组中的字符逐个追加到 StringBuilder 中,然后返回 StringBuilder 对象转换成的字符串。

这段代码的目的是将字符数组中的字符逐个追加到 StringBuilder 中,然后返回 StringBuilder 对象转换成的字符串。下面是一个例子来说明这个过程:

假设有一个字符数组 charArray,内容为 {‘a’, ‘b’, ‘c’, ‘d’}。

char[] charArray = {'a', 'b', 'c', 'd'};// 构建一个 StringBuilder 对象
StringBuilder sb = new StringBuilder();// 遍历字符数组,将每个字符追加到 StringBuilder 中
for (char c : charArray) {sb.append(c);
}// 将 StringBuilder 对象转换为字符串并返回
String result = sb.toString();
System.out.println(result); // 输出:abcd

//在这个例子中,我们首先创建了一个空的 StringBuilder 对象 sb。然后,我们遍历字符数组 charArray,将数组中的每个字符逐个追加到 StringBuilder 中。最后,我们使用 sb.toString() 将 StringBuilder 对象转换为字符串,并将其存储在 result 变量中。最终输出的结果是字符串 “abcd”。

(5)toCharArray() 是 Java 中 String 类的一个方法,用于将字符串转换为字符数组。它将字符串中的每个字符复制到一个新的字符数组中,并返回该字符数组。

String str = "hello";
char[] charArray = str.toCharArray();

我们首先声明了一个字符串 str,内容为 “hello”。然后,我们调用 toCharArray() 方法将字符串转换为字符数组,并将结果存储在 charArray 变量中。最终,charArray 中存储的内容是 {‘h’, ‘e’, ‘l’, ‘l’, ‘o’}。
(6)charAt() 是 Java 中 String 类的一个方法,用于获取字符串中指定索引位置的字符。它接受一个整数参数,表示要获取的字符在字符串中的位置,然后返回该位置的字符。

public char charAt(int index)
String str = "hello";
char ch = str.charAt(1);
System.out.println(ch); // 输出:e

4.代码实现

class Solution {public String reverseVowels(String s) {int left=0;int right=s.length()-1;String yuanyin="AEIOUaeiou";char[] mm=s.toCharArray();//将字符串变成字符数组,字符数组有利于单个处理字符while(left<right){//字符串左半部分没含有元音字母while(left<right&&yuanyin.indexOf(s.charAt(left))==-1){left++;}//字符串右半部分没含有元音字母while(left<right&&yuanyin.indexOf(s.charAt(right))==-1){right--;}if(left<right){char temp=mm[left];mm[left]=mm[right];mm[right]=temp;left++;right--;}}StringBuilder sb=new StringBuilder();for(char c:mm){sb.append(c);}return sb.toString();}}

方法2:没有什么变动 ,只是把构造StringBuilder直接换成了 ,将数组字符 返回到一个新的字符串 return new string(mm).

class Solution {public String reverseVowels(String s) {int left=0;int right=s.length()-1;String yuanyin="AEIOUaeiou";char[] mm=s.toCharArray();//将字符串变成字符数组,字符数组有利于单个处理字符while(left<right){//字符串左半部分没含有元音字母while(left<right&&yuanyin.indexOf(s.charAt(left))==-1){left++;}//字符串右半部分没含有元音字母while(left<right&&yuanyin.indexOf(s.charAt(right))==-1){right--;}if(left<right){char temp=mm[left];mm[left]=mm[right];mm[right]=temp;left++;right--;}}//   StringBuilder sb=new StringBuilder();// for(char c:mm)// {//   sb.append(c);// }// return sb.toString();// 将字符数组转换为字符串return new String(mm);}}

方法三:思想没有什么变动,就是如果不用加强for循环 ,用数组的普通循环

class Solution {public String reverseVowels(String s) {int left=0;int right=s.length()-1;String yuanyin="AEIOUaeiou";char[] mm=s.toCharArray();//将字符串变成字符数组,字符数组有利于单个处理字符while(left<right){//字符串左半部分没含有元音字母while(left<right&&yuanyin.indexOf(s.charAt(left))==-1){left++;}//字符串右半部分没含有元音字母while(left<right&&yuanyin.indexOf(s.charAt(right))==-1){right--;}if(left<right){char temp=mm[left];mm[left]=mm[right];mm[right]=temp;left++;right--;}}StringBuilder sb=new StringBuilder();for(int i=0;i<mm.length;i++){sb.append(mm[i]);}return sb.toString();// 将字符数组转换为字符串//第二种方法 return new String(mm);}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/753329.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

03、判断和循环

三、判断与循环 文章目录 三、判断与循环顺序结构分支结构If语句在程序中就是用来判断的switch 循环结构forwhiledo while 顺序结构 顺序结构是Java程序默认的执行流程&#xff0c;按照代码的先后顺序&#xff0c;从上到下依次执行。 分支结构 If语句在程序中就是用来判断的 …

C语言 实用调试技巧

我们的博客已经更新到了数据结构&#xff0c;但是当我在深耕数据结构时我发现我在C语言是遗漏了一个重要的东西&#xff0c;那就是C语言的使用调试技巧。这篇博客对数据结构非常重要&#xff0c;请大家耐心观看。 1. 什么是bug&#xff1f; 第一次被发现的导致计算机错误的飞蛾…

Vue2 基础三组件化开发

代码下载 组件 (Component) 是 Vue.js 最强大的功能之一&#xff0c;组件可以扩展 HTML 元素&#xff0c;封装可重用的代码。 组件注册 全局注册&#xff1a; Vue.component(组件名称, {data: 组件数据,template: 组件模板内容});// 全局组件Vue.component(button-counter, …

在AI创业热潮下,如何抓住AI赚钱机会,实现人生逆袭

随着人工智能技术的迅猛发展,AI创业热潮正席卷全球。这不仅为科技领域的专业人士提供了无限的商机,也为普通人开辟了全新的赚钱途径。本文将为您揭示在AI创业热潮下,普通人如何抓住AI赚钱机会,实现人生逆袭,同时探讨哪些行业适合应用AI技术。 一、普通人如何抓住AI赚钱机…

前端基础篇-快速了解 Vue 前端框架(Vue 指令)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 Vue 概述 2.0 Vue 指令 2.1 指令 - v-bind 2.2 指令 - v-model 2.3 指令 - v-on 2.4 指令 - v-if、v-else-if、v-else 2.5 指令 - v-show 2.6 指令 - v-for 3.0 生…

es文档操作命令

文档操作 documents 创建数据&#xff08;put&#xff09; 向 user 索引下创建3条数据 PUT /user/_doc/1 {"name":"zhangsan","age":18,"sex":"男","info":"一顿操作猛如虎&#xff0c;一看工资2500"…

码云简化版使用教程

码云简化版使用教程 ①创建本地项目 ②在本地项目根目录下创建git相关目录及文件 ③在码云上创建新的仓库 ④在本地项目中配置仓库地址&#xff0c;提交项目内容 下面直接从第二步开始讲解 在本地项目根目录下创建git相关目录及文件 1、打开项目根目录&#xff0c;进入cmd界…

Linux应用 线程同步之互斥锁

1、概念 1.1 定义 互斥锁&#xff08;Mutex&#xff09;&#xff0c;又称互斥型信号量&#xff0c;是一种特殊的二值性信号量&#xff0c;主要用于实现对共享资源的独占式处理。任意时刻&#xff0c;互斥锁的状态只有两种&#xff1a;开锁或闭锁。当有任务持有时&#xff0c;…

旧衣服回收小程序开发,“互联网+”模式下巨大收益

近年来&#xff0c;在人们生活水平的提高下&#xff0c;旧衣物随之增加&#xff0c;如何处理旧衣服成为了当下大众所困扰的问题。 当下&#xff0c;旧衣回收行业已经成为了一个新的热门行业&#xff0c;我国人口众多&#xff0c;旧衣物的市场规模也在不断扩大&#xff0c;市场…

基于springboot+vue的房屋交易平台

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

Greetings

Problem - 1915F - Codeforces 题意 给一些(l,r)找到所有能够包含(l,r)的数目 引入 也就是找逆序对个数 要用到归并排序中的思想&#xff1a; //https://www.luogu.com.cn/problem/P1216 #include<iostream> #include<cstdio> #include<stack> #include…

python面向对像之第二次笔记

python面向对像 一、面向对象的三大特性面向对象包含3大主要特性&#xff1a;封装私有成员继承复写 pass关键字多态 总结 一、面向对象的三大特性 面向对象包含3大主要特性&#xff1a; 封装 封装是面向对象编程中的一个重要概念&#xff0c;它指的是将数据&#xff08;属性&a…

STM32信息安全 1.2 课程架构介绍:芯片生命周期管理与安全调试

STM32信息安全 1.2 课程架构介绍&#xff1a;STM32H5 芯片生命周期管理与安全调试 下面开始学习课程的第二节&#xff0c;简单介绍下STM32H5芯片的生命周期和安全调试&#xff0c;具体课程大家可以观看STM32官方录制的课程&#xff0c;链接&#xff1a;1.2. 课程架构介绍&…

记一些有关Element Plus的样式修改

先记一个放着&#xff0c;后续慢慢补充。。。 一个 Vue 3 UI 框架 | Element Plus Radio 单选框 1、去除radio的圆圈 .box-radio {/deep/ .el-radio__input {display: none;} }

【QT入门】VS2019和QT Creator如何添加第三方模块

声明&#xff1a;该专栏为本人学习Qt知识点时候的笔记汇总&#xff0c;希望能给初学的朋友们一点帮助(加油&#xff01;) 往期回顾&#xff1a; 【QT入门】什么是qt&#xff0c;发展历史&#xff0c;特征&#xff0c;应用&#xff0c;QtCreator-CSDN博客 【QT入门】Windows平台…

模方信创版正式上线!支持水面一键修复、道路置平、纹理编辑...

现在国家大力推进信创国产化软硬件替代的政策背景下&#xff0c;大势智慧重磅发布模方信创版&#xff0c;以满足用户对在信创环境下进行实景三维模型修饰与编辑的需求。 模方信创版与重建大师信创版、DasViewer信创版一道&#xff0c;构筑起三维重建信创生态的“铁三角”&…

Unity PS5开发 天坑篇 之 DEVKit环境部署与系统升级02

上一篇各位大神们已经收到了SONY官方免费寄送的PS5开发机与测试机&#xff0c;恭喜大家成为SONY的开发者, 本篇继续PS5开发机的部署与开发套件使用。 一, PC安装PS5 SDK与系统升级 1. PC/PS5 SDK Manager下载安装包 登录开发者账号后&#xff0c;Development->Resources&a…

挑战杯 车道线检测(自动驾驶 机器视觉)

0 前言 无人驾驶技术是机器学习为主的一门前沿领域&#xff0c;在无人驾驶领域中机器学习的各种算法随处可见&#xff0c;今天学长给大家介绍无人驾驶技术中的车道线检测。 1 车道线检测 在无人驾驶领域每一个任务都是相当复杂&#xff0c;看上去无从下手。那么面对这样极其…

Linux系统——测试磁盘IOPS性能

目录 引言 一、IOPS指标受到的影响因素 二、提高IOPS性能的措施 三、测试IOPS性能命令 1.fio工具 2.ioping工具 引言 磁盘IOPS是指磁盘每秒钟可以完成的输入/输出操作数。它是衡量磁盘性能的一个重要指标&#xff0c;尤其对于需要处理大量随机读写操作的应用程序&…

B010-springcloud alibaba 分布式事务 Seata

目录 分布式事务基础事务本地事务分布式事务分布式事务的场景 分布式事务解决方案全局事务/两阶段提交可靠消息服务最大努力通知TCC事务 Seata介绍Seata实现分布式事务控制案例基本代码修改order微服务OrderSeataControllerOrderServiceImpl5注释容错相关代码ProductClient 修改…