力扣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,一经查实,立即删除!

相关文章

Qt的多线程类

主要介绍一些Qt的多线程类 QThread QThread 是 Qt 提供的基本的多线程类&#xff0c;它允许创建自定义的线程。可以继承 QThread 类&#xff0c;并重写其 run() 方法&#xff0c;在 run() 方法中编写线程要执行的代码。以下是一个简单的示例&#xff1a; #include <QThre…

03、判断和循环

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

C语言 实用调试技巧

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

抖音小店怎么高效的对接达人?分享四年老运营的经验,可记笔记!

大家好&#xff0c;我是电商糖果 抖音现在最火的卖货方式&#xff0c;依旧是达人带货&#xff0c;也就是商家和达人合作模式。 有很多刚开店的朋友找达人合作总是失败&#xff0c;不知道什么原因。 其实找达人合作是需要技巧的&#xff0c;糖果做抖音小店已经四年了&#xf…

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 生…

实现C++自定义的String类

一、简介 采用了COW写时复制的方式实现&#xff0c;即在每个String类数据域之前用了4个字节的空间进行引用计数。通过拷贝构造函数或者赋值运算符函数进行赋值时不会重新开辟空间&#xff0c;只会对引用计数加一&#xff0c;当有修改操作时&#xff0c;才会重新开辟新的空间&a…

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;市场…

【QT入门】qmake和cmake的简单区别

声明&#xff1a;该专栏为本人学习Qt知识点时候的笔记汇总&#xff0c;希望能给初学的朋友们一点帮助(加油&#xff01;) 往期回顾&#xff1a; 【QT入门】Windows平台下 QT的编译过程-CSDN博客 【QT入门】VS2019QT的开发环境配置-CSDN博客 【QT入门】VS2019和QT Creator如何添…

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

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

代码随想录算法训练营Day48 | LeetCode121. 买卖股票的最佳时机、LeetCode122.买卖股票的最佳时机II

LeetCode121. 买卖股票的最佳时机 动规五部曲&#xff1a; 1、dp[i][0]:在第i天持有股票的最大收入&#xff1b;dp[i][1]:在第i天不持有股票的最大收入。 2、递推公式&#xff1a;第i天持有股票&#xff0c;有两种情况&#xff1a;前一天已经持有&#xff0c;当天刚买入&#…

Greetings

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

用python如何实现智能合约?如何使用remix编写solidity智能合约并部署上链

目录 用python如何实现智能合约? 直接展示下成功界面 下面分步骤说: remix代码 python链接remix代码

将查询出来数据中相对应的字段根据枚举类更改为其中文内容

&#x1f413;1.通过mapper.xml文件中的内容使用casewhen进行更换字段内容 SELECT case user_type when 101000 then 李明 when 101001 then 王丽 when 101002 then 王小黑 when 101003 then 王大黑 when 101004 then 超级大王 when 101005 then 小董 else end as 别称 from…

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. 课程架构介绍&…