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

Java的String与StringBuilder例题

​​在这里插入图片描述

package com.jiachen.StringBuilderDemo1;

import java.util.Scanner;

public class Exercise2 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String s = scanner.nextLine().trim(); // 读取输入并去除前后空格
        String result;

        // 根据输入的类型进行反转
        if (s.contains(".")) {
            // 处理小数
            result = reverseDecimal(s);
        } else if (s.contains("/")) {
            // 处理分数
            result = reverseFraction(s);
        } else if (s.endsWith("%")) {
            // 处理百分数
            result = reversePercentage(s);
        } else {
            // 处理整数
            result = reverseInteger(s);
        }

        System.out.println(result);
    }

    /**
     * 反转整数部分
     */
    private static String reverseInteger(String s) {
        StringBuilder sb = new StringBuilder(s).reverse();
        // 去掉前导零,除非原数为 "0"
        while (sb.length() > 1 && sb.charAt(0) == '0') {
            sb.deleteCharAt(0);
        }
        return sb.toString();
    }

    /**
     * 反转小数部分
     */
    private static String reverseDecimal(String s) {
        String[] parts = s.split("\\.");
        String integerPart = reverseInteger(parts[0]); // 反转整数部分
        String decimalPart = new StringBuilder(parts[1]).reverse().toString(); // 反转小数部分
        // 去掉小数部分的后导零,除非小数部分全为 "0"
        while (decimalPart.length() > 1 && decimalPart.endsWith("0")) {
            decimalPart = decimalPart.substring(0, decimalPart.length() - 1);
        }
        return integerPart + "." + decimalPart;
    }

    /**
     * 反转分数部分
     */
    private static String reverseFraction(String s) {
        String[] parts = s.split("/");
        String numerator = reverseInteger(parts[0]); // 反转分子
        String denominator = reverseInteger(parts[1]); // 反转分母
        return numerator + "/" + denominator;
    }

    /**
     * 反转百分数部分
     */
    private static String reversePercentage(String s) {
        String numberPart = s.substring(0, s.length() - 1); // 去掉百分号
        String reversedNumber = reverseInteger(numberPart); // 反转数字部分
        return reversedNumber + "%";
    }
}

String类和Stringbulider类经常相互转换,比如想要反转字符串,就要把String类型转为StringBuilder类型,然后调用reverse方法,比如想要分割Stringbuilder类型的变量,要先把他转成字符串类型。

几个必须转化的例子:

  1. 反转字符串

    • 场景:需要反转一个字符串。
    • 示例代码
      String original = "hello";
      StringBuilder sb = new StringBuilder(original);
      String reversed = sb.reverse().toString();
      System.out.println(reversed); // 输出 "olleh"
      
  2. 分割字符串

    • 场景:需要将一个 StringBuilder 对象按特定分隔符分割成多个子字符串。
    • 示例代码
      StringBuilder sb = new StringBuilder("apple,banana,cherry");
      String[] parts = sb.toString().split(",");
      for (String part : parts) {
          System.out.println(part);
      }
      // 输出:
      // apple
      // banana
      // cherry
      
  3. 拼接字符串

    • 场景:需要频繁拼接字符串,然后最终得到一个不可变的字符串。
    • 示例代码
      StringBuilder sb = new StringBuilder();
      sb.append("Hello");
      sb.append(" ");
      sb.append("World");
      String result = sb.toString();
      System.out.println(result); // 输出 "Hello World"
      
  4. 去除前导零

    • 场景:需要去除字符串前面的零,然后得到一个不可变的字符串。
    • 示例代码
      String original = "000123";
      StringBuilder sb = new StringBuilder(original);
      while (sb.length() > 1 && sb.charAt(0) == '0') {
          sb.deleteCharAt(0);
      }
      String result = sb.toString();
      System.out.println(result); // 输出 "123"
      
  5. 去除后导零

    • 场景:需要去除字符串后面的零,然后得到一个不可变的字符串。
    • 示例代码
      String original = "123000";
      StringBuilder sb = new StringBuilder(original);
      while (sb.length() > 1 && sb.charAt(sb.length() - 1) == '0') {
          sb.deleteCharAt(sb.length() - 1);
      }
      String result = sb.toString();
      System.out.println(result); // 输出 "123"
      

总结:

  • StringStringBuilder:适用于需要频繁修改字符串的场景,如反转、插入、删除等。
  • StringBuilderString:适用于需要返回不可变字符串或使用 String 类提供的方法进行进一步处理的场景,如分割、查找等。

http://www.kler.cn/a/533211.html

相关文章:

  • 在React中使用redux
  • LabVIEW微位移平台位移控制系统
  • 蓝桥杯刷题DAY3:Horner 法则 前缀和+差分数组 贪心
  • Vite:现代前端开发的利器
  • Maven的三种项目打包方式——pom,jar,war的区别
  • ChatGPT怎么回事?
  • 如何学习大数据治理:轻松上手指南
  • 大语言模型概述
  • Redis的通用命令
  • 98,【6】 buuctf web [ISITDTU 2019]EasyPHP
  • 计算机网络安全与运维的关键 —— 常用端口全解析
  • 【JAVA】Netty使用教程
  • Java 报错:找不到或无法加载主类
  • Maven 项目的基本结构
  • 我们来学人工智能 -- 感悟DeepSeek
  • Llama最新开源大模型Llama3.1
  • Java之线程篇六
  • 关于论文复现的环境配置以及其他的坑点
  • 自研有限元软件与ANSYS精度对比-Bar3D2Node三维杆单元模型-央视大裤衩实例
  • Vue3 完整学习笔记 - 第三部分
  • 【Spring】Spring Cloud Alibaba 版本选择及项目搭建笔记
  • 剑指offer 二叉树 持续更新中...
  • FastPlanner论文解读(一)——前端路径搜索
  • 「全网最细 + 实战源码案例」设计模式——模板方法模式
  • JavaScript语言的面向对象编程
  • 代码随想录算法训练营Day36