力扣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);
       
        }
    
    }

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

读《Cheating Depth: Enhancing 3D Surface Anomaly Detection via Depth Simulation》

WCAV2024 摘要&引言 RGB骨干&#xff1a;某些表面异常仅在RGB中实际上仍然是看不见的&#xff0c;因此需要合并三维信息&#xff08;确实重点在于“合并”&#xff0c;单纯看例子里的深度图片也看不出来异常在哪里&#xff0c;但是和rgb overlay之后就明显一些了&#xf…

2024年pmp的考试时间是什么时候?

2024年 PMP 考试时间已经定了 &#xff0c;分别是 3 月、6月、8月、11月 &#xff0c;4月就准备报6月的考试了&#xff0c;有想法的别错过啦~ 一、报考条件 报考条件其实挺简单的&#xff0c;最核心的条件还是满足以下 2 个&#xff1a;1、本科毕业需要满 3 年时间&#xff0c…

网络编程--高并发服务器

这里写目录标题 引入场景 多进程并发服务器二级目录二级目录二级目录 多线程并发服务器二级目录二级目录二级目录 多路IO转接服务器设计思路对比引入 select函数简介参数介绍第一个参数第234参数返回值对于第234参数的应用对于最后一个参数总结 附加操作&#xff08;附加四个函…

项目试运行报告-word

一、试运行目的 软件项目试运行的主要目的是在实际应用环境中对软件系统进行全面检验&#xff0c;确保其满足设计要求和用户需求&#xff0c;同时发现和解决潜在的问题&#xff0c;为正式投入使用做好准备。通过试运行&#xff0c;我们可以&#xff1a; 验证软件系统的稳定性…

国创证券|资源再生概念持续活跃,超越科技两连板,大地海洋等走高

资源再生概念15日盘中再度走强&#xff0c;截至发稿&#xff0c;超越科技涨停斩获两连板&#xff0c;深水海纳涨超14%&#xff0c;大地海洋涨超12%&#xff0c;华新环保涨近9%&#xff0c;天奇股份、格林美、怡球资源等涨超5%。 消息面上&#xff0c;3月13日&#xff0c;国务院…

全新2024快递平台系统 独立版快递信息查询小程序源码 cps推广营销流量主+前端 同城快递平台

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 快递代发快递代寄寄件小程序可以对接易达云洋一级总代 快递小程序&#xff0c;接入云洋/易达物流接口&#xff0c;支持选择快递公司&#xff0c;三通一达&#xff0c;极兔&#xff0c…

Python the code is unreachable

Python the code is unreachable 正文 正文 相信有不少小伙伴在使用 Python 的时候有时候会遇到 the code is unreachable 这样的 warning 提示。这种提示表示在我们当前书写的代码种有一部分代码被屏蔽了。可能会存在潜在的 bug&#xff0c;需要我们注意&#xff0c;那么什么…

Three 光源 (总结四)

萤火虫飞舞 import * as THREE from three import { OrbitControls } from ../../js/jsm/controls/OrbitControls.js; // 引入相机控件let scene, camera, renderer, controls, flyBall, ball function init() {scene new THREE.Scene()camera new THREE.PerspectiveCamera(7…

幸福金龄会第二届《锦绣中华》中老年文旅文化艺术节圆满落幕

广东&#xff0c;这片承载着深厚文化底蕴的土地&#xff0c;再次见证了中老年文化艺术的璀璨盛放。近日&#xff0c;由幸福金龄会主办、广之旅协办的第二届《锦绣中华》中老年文旅文化艺术节在广东隆重举行。活动汇聚了广东各支文艺团队&#xff0c;他们用最真挚的表演&#xf…

讲述微信小程序 通信模型

之前的文章 讲述微信小程序宿主环境 我们讲到了 手机微信 为小程序 提供了多方面支持 包括 1 通讯模型 2 运行机制 3 组件 4 API 今天 我们就来说 通讯模型 小程序中的 通信主题 是 渲染层 和 逻辑层 首先 渲染层中 包含的是 wxml 页面模板 和 wxss样式 逻辑层 里面则都是js的…

如何从视频中提取gif?仅需三步在线制作

视频提取GIF是一种常见的图像处理技术&#xff0c;它可以将视频中的某一段或某一帧提取出来&#xff0c;并保存为GIF格式的动图。这种技术在互联网上广泛应用&#xff0c;成为了分享精彩瞬间和制作有趣动画的有力工具。想要从视频中截取动图&#xff0c;使用视频转gif工具&…

超越标签的探索:K-means与DBSCAN在数据分析中的新视角

最近在苦恼为我的数据决定分组问题&#xff0c;在查找资料时&#xff0c;恰好看到机器学习中的无监督学习的聚类分析&#xff0c;正好适用于我的问题&#xff0c;但是我之前学机器学习时。正好没有学习无监督部分&#xff0c;因为我认为绝大多数问题都是有标签的监督学习&#…

IPSEC VPN-详解原理

目录 IPSEC提供的安全服务 IPSEC协议簇 ​编辑 安全协议 1.传输模式 2. 隧道模式 AH ---鉴别头协议 AH提供的安全服务&#xff1a; AH头部 AH的保护范围 1.传输模式 2.隧道模式 ​编辑 ESP ---封装安全载荷协议 ESP提供的安全服务&#xff1a; ESP的头部 ESP的保护范围 1.传输…

进程的概念 | PCB | Linux下的task_struct | 父子进程和子进程

在讲进程之前首先就是需要去回顾一下我们之前学的操作系统是干嘛的&#xff0c;首先操作系统是一个软件&#xff0c;它是对上提供一个良好高效&#xff0c;稳定的环境的&#xff0c;这是相对于用户来说的&#xff0c;对下是为了进行更好的软硬件管理的&#xff0c;所以操作系统…

es文档操作命令

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

关于卷积神经网络特征可视化

卷积神经网络CNN&#xff0c;一个大号/深层的&#xff0c;现代的&#xff0c;黑箱的&#xff0c;信号/图像处理器。 简单讲解如何将图像输入到卷积神经网络CNN并显示网络不同层的激活图&#xff0c;并通过将激活图与原始图像进行比较以探索网络学习哪些特征 本例来源于Mathwo…

IP代理技术革新:探索数据采集的新路径

引言&#xff1a; 随着全球化进程不断加深&#xff0c;网络数据采集在企业决策和市场分析中扮演着愈发重要的角色。然而&#xff0c;地域限制和IP封锁等问题常常给数据采集工作带来了巨大挑战。亿牛云代理服务凭借其强大的网络覆盖和真实住宅IP资源&#xff0c;成为解决这些问…

大A为何频繁跳水,Python量化1200W条交易数据给你答案!| 邢不行

这是邢不行第 110 期量化小讲堂的分享 作者 | 邢不行、密斯锌硒 常看我文章的读者应该能发现&#xff0c;我介绍过的量化策略大多都会在开盘时买入。 比如小市值策略和散户反着买策略&#xff1a; 小市值策略文章 散户反着买策略 它们都会在每个周期的第一个交易日开盘去…

Git Bash命令初始化本地仓库,提交到远程仓库

git init&#xff1a;初始化空仓库 // 初始化一个空仓库或者重新初始化一个存在的仓库 git init git remote // 为当前本地仓库添加一个远程仓库地址 git remote add origin https://gitee.com/xxx/demo.git git pull // 从设置好链接的远程仓库拉去已经存在的数据&#xff0c;…

Python自动化测试——postman,jmeter接口测试

关于众所postman&#xff0c;jmeter&#xff0c;做自动化测试的我想对这两个词并不陌生。大家都知道postman用来做接口测试很方便,下面我们就用一些例子来演示一下它该如何进行接口测试&#xff1a; 首先我们来介绍一下接口测试的概念&#xff1a; 1、什么是接口测试&#xf…