当前位置: 首页 > news >正文

【java 如何将字符串反转?】

文章目录

    • 概要
    • 示例
      • (1)使用StringBuilder的reverse方法
      • (2)使用charAt和循环
      • (3)使用双指针
      • (4)使用递归
    • 总结

概要

在Java中,有多种方法可以将字符串反转,我这里列举四种。

示例

(1)使用StringBuilder的reverse方法

StringBuilder类提供了一个reverse()方法,它可以非常方便地反转字符串。

public String reverseStringUsingStringBuilder(String str) {  if (str == null || str.isEmpty()) {  return str;  }  StringBuilder sb = new StringBuilder(str);  sb.reverse();  return sb.toString();  
}

(2)使用charAt和循环

你可以通过遍历字符串中的每个字符,并从后向前将其放入一个新的字符数组或StringBuilder中来实现反转。

public String reverseStringUsingCharArray(String str) {  if (str == null || str.isEmpty()) {  return str;  }  char[] charArray = str.toCharArray();  int left = 0;  int right = charArray.length - 1;  while (left < right) {  char temp = charArray[left];  charArray[left] = charArray[right];  charArray[right] = temp;  left++;  right--;  }  return new String(charArray);  
}

(3)使用双指针

与方法二类似,但使用两个指针来避免额外的临时变量。

public String reverseStringUsingTwoPointers(String str) {  if (str == null || str.isEmpty()) {  return str;  }  char[] charArray = str.toCharArray();  int left = 0;  int right = charArray.length - 1;  while (left < right) {  char temp = charArray[left];  charArray[left] = charArray[right];  charArray[right] = temp;  left++;  right--;  }  return new String(charArray);  
}

注意:方法二和方法三在本质上是相同的,只是命名和注释有所不同。

(4)使用递归

虽然递归在处理大字符串时可能不是最高效的方法,但它仍然是一种可能的解决方案。

public String reverseStringUsingRecursion(String str) {  if (str == null || str.length() <= 1) {  return str;  }  return reverseStringUsingRecursion(str.substring(1)) + str.charAt(0);  
}

总结

在面试中,你可以根据问题的上下文和面试官的期望来选择最合适的方法。通常情况下,使用StringBuilder的reverse()方法是最简单且高效的方法。但在解释时,也可以提到其他方法以展示你对Java字符串处理的深入理解。

相关文章:

  • C++访问越界
  • python 批量ts合并成一个mp4
  • Unity3D 基于YooAssets的资源管理详解
  • Web安全渗透攻防技术
  • 深度解读:Apache Kafka如何超越消息引擎的界限
  • echaerts图例自动滚动并隐藏翻页按钮
  • Android基础-性能优化
  • Iphone自动化指令每隔固定天数打开闹钟关闭闹钟(二)
  • Vue 跨平台性能优化十法
  • HLA高层体系结构1.0.0版本
  • 父组件调用子组件方法(组合式 API版)
  • 浅谈申请小程序地理位置权限的正确打开方式
  • (代码示例)使用setTimeout来延迟加载JS脚本文件
  • yolov5-ros模型结合zed2相机部署在 Ubuntu系统
  • MoE-LLaVA:为大型视觉-语言模型引入专家混合
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • Laravel 菜鸟晋级之路
  • laravel5.5 视图共享数据
  • Odoo domain写法及运用
  • PAT A1050
  • spring security oauth2 password授权模式
  • supervisor 永不挂掉的进程 安装以及使用
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 测试开发系类之接口自动化测试
  • 第2章 网络文档
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 番外篇1:在Windows环境下安装JDK
  • 计算机常识 - 收藏集 - 掘金
  • 排序算法学习笔记
  • 前端技术周刊 2019-01-14:客户端存储
  • 浅谈Golang中select的用法
  • 如何在GitHub上创建个人博客
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 译米田引理
  • 优化 Vue 项目编译文件大小
  • hi-nginx-1.3.4编译安装
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • (1)(1.13) SiK无线电高级配置(六)
  • (10)ATF MMU转换表
  • (70min)字节暑假实习二面(已挂)
  • (NSDate) 时间 (time )比较
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (一一四)第九章编程练习
  • .NET delegate 委托 、 Event 事件,接口回调
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • .set 数据导入matlab,设置变量导入选项 - MATLAB setvaropts - MathWorks 中国