十个Java字符串操作示例程序

1. 如何在String中获取不同的字符及其计数?

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;public class DistinctCharsCount {public static void main(String[] args) {printDistinctCharsWithCount("abc");printDistinctCharsWithCount("abcab3");printDistinctCharsWithCount("hi there, i am maxsu");}private static void printDistinctCharsWithCount(String input) {Map<Character, Integer> charsWithCountMap = new HashMap<>();// 使用Java 8中的Map合并方法for (char c : input.toCharArray())charsWithCountMap.merge(c, 1, Integer::sum);System.out.println(charsWithCountMap);// 另一种方法是使用最新的Java增强功能而不是for循环,但有点复杂List<Character> list = input.chars().mapToObj(c -> (char) c).collect(Collectors.toList());list.stream().forEach(c -> charsWithCountMap.merge(c, 1, Integer::sum));System.out.println(charsWithCountMap);}}

2. 编写一个java程序来反转String

有很多方法可以反转String,一些常见的是:

  • 使用StringBuilder/StringBuffer类的reverse()方法;
  • 使用char/byte数组并反向遍历并填充结果字符串;

但是,如果不确定输入String内容,应该使用StringBuilder内置的reverse()方法。因为使用char和byte数组可能会产生不需要的结果。

public class ReverseAString {public static void main(String[] args) {reverseInputString("abc");reverseInputString("ç©∆sd˚ø"); //special chars}private static void reverseInputString(String input) {StringBuilder sb = new StringBuilder(input);String result = sb.reverse().toString();System.out.println(result);}}

3. 如何检查字符串是否是回文?

回文串是反向串也是相同的串。所以可以反转输入字符串并检查两个字符串是否相等。或者可以使用String charAt(int index)方法来检查回文串。

public class PalindromeString {public static void main(String[] args) {checkPalindromeString("abc");checkPalindromeString("abcba");checkPalindromeString("ç∂©∂ç");}private static void checkPalindromeString(String input) {boolean result = true;int length = input.length();for(int i=0; i < length/2; i++) {if(input.charAt(i) != input.charAt(length-i-1)) {result = false;break;}}System.out.println(input + " is palindrome = "+result);}}

4. 如何删除字符串中所有出现的给定字符?

String类中没有remove函数,但在这种情况下可以使用replaceAll()。这是一个简单的程序,演示了如何做到这一点。

public class RemoveCharFromString {public static void main(String[] args) {removeCharFromString("abcbcdjfkd", 'c');removeCharFromString("Maxsu", 'a');removeCharFromString("ç∂©∂ç", '©');}private static void removeCharFromString(String input, char c) {String result = input.replaceAll(String.valueOf(c), "");System.out.println(result);}}

5. 如何以编程方式证明String是不可变的?

我们知道String在java中是不可变的,但新开发人员仍然对此感到困惑。试着理解这种混乱的原因。

String s1 = "Java";s1 = "Python"

在上面的代码片段中,s1值已经改变,它是一个String对象。那么怎么能说String是不可变的呢?
要理解的最重要的一点是如何在java中创建字符串。当使用字符串文字创建String时,它不会更改原始String的值。它在字符串池中创建一个新的String并更改该变量的引用。所以原始字符串值永远不会改变,这就是字符串不可变的原因。

public class StringImmutabilityTest {public static void main(String[] args) {String s1 = "Java"; String s2 = s1;System.out.println(s1 == s2);s1 = "Python"; System.out.println(s1 == s2); System.out.println(s2); }
}

6. 编写一个程序来计算字符串中的单词数量?

这个程序的简单解决方案似乎是input.split(" ").length,但是如果字符串没有正确格式化并且它包含前导和尾随空格,重复多个空格和制表符,这将不起作用。
幸运的是,String split()函数将正则表达式作为参数,可以使用它来计算字符串中的单词数。

public class CountNumberOfWordsInString {public static void main(String[] args) {countNumberOfWords("My name is Maxsu");countNumberOfWords("I Love Java Programming");countNumberOfWords(" This    is  not   properly formatted        line ");}private static void countNumberOfWords(String line) {String trimmedLine = line.trim();int count = trimmedLine.isEmpty() ? 0 : trimmedLine.split("\\s+").length;System.out.println(count);}
}

7. 编写一个程序来检查是否创建了两个具有相同字符的字符串?

首先,必须从输入字符串创建一组字符。然后使用Set equals()方法检查它们是否包含相同的字符。这是一个简单的程序,用于检查是否使用相同的字符创建了两个字符串。

import java.util.Set;
import java.util.stream.Collectors;public class CheckSameCharsInString {public static void main(String[] args) {sameCharsStrings("abc", "cba");sameCharsStrings("aabbcc", "abc");sameCharsStrings("abcd", "abc");sameCharsStrings("11", "1122");sameCharsStrings("1122", "11");    }private static void sameCharsStrings(String s1, String s2) {Set<Character> set1 = s1.chars().mapToObj(c -> (char) c).collect(Collectors.toSet());Set<Character> set2 = s2.chars().mapToObj(c -> (char) c).collect(Collectors.toSet());System.out.println(set1.equals(set2));}}

8. 读取两个String用户输入并检查是否第一个包含第二个?

这是一个简单的程序,可以使用String contains()方法来检查指定的字符串是否是此字符串的一部分。但是,需要使用Scanner类来读取用户输入。

import java.util.Scanner;public class StringContainsSubstring {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("Enter First String:");String s1 = scanner.nextLine();System.out.println("Enter Second String:");String s2 = scanner.nextLine();scanner.close();boolean result = stringContainsSubstring(s1, s2);System.out.println(s1+" contains "+s2+" = "+result);}private static boolean stringContainsSubstring(String string, String substring) {boolean result = false;result = string.contains(substring);return result;}}

执行上面示例代码,得到以下结果 -

Enter First String:
Maxsu
Enter Second String:
su
Maxsu contains su = true

9. 如何在不使用第三个变量的情况下交换两个字符串?

可以使用String substring()方法来完成它。下面是一个简单的演示代码片段:

String s1 = "abc";
String s2 = "def";s1 = s1.concat(s2);
s2 = s1.substring(0,s1.length()-s2.length());
s1 = s1.substring(s2.length());

如果必须写一个函数来做这件事怎么办? 由于String是不可变的,因此方法结束后方法中String引用的值的更改将消失。此外,无法从java中的方法返回多个对象。因此,必须创建一个容器来保存输入字符串,然后在方法中执行上述逻辑。下面的代码显示了如何做到这一点,虽然它可能看起来很复杂,但逻辑与上面相同。

package com.journaldev.java.string;import java.util.Scanner;public class SwapTwoStrings {public static void main(String[] args) {Container container = new Container();Scanner scanner = new Scanner(System.in);System.out.println("Enter First String:");container.setFirstString(scanner.nextLine());System.out.println("Enter Second String:");container.setSecondString(scanner.nextLine());scanner.close();System.out.println(container);container = swapStrings(container);System.out.println(container);}private static Container swapStrings(Container container) {container.setFirstString(container.getFirstString().concat(container.getSecondString())); //s1 = s1+s2container.setSecondString(container.getFirstString().substring(0, container.getFirstString().length()-container.getSecondString().length())); // s2=s1container.setFirstString(container.getFirstString().substring(container.getSecondString().length()));return container;}}class Container{private String firstString;private String secondString;public String getFirstString() {return firstString;}public void setFirstString(String firstString) {this.firstString = firstString;}public String getSecondString() {return secondString;}public void setSecondString(String secondString) {this.secondString = secondString;}@Overridepublic String toString() {return "First String = "+firstString+", Second String = "+secondString;}
}

执行上面示例代码,得到以下结果 -

Enter First String:
Java
Enter Second String:
Python
First String = Java, Second String = Python
First String = Python, Second String = Java

10. 编写一个程序,从输入字符串中找出第一个非重复字符?

参考示例代码

package com.journaldev.java.string;import java.util.ArrayList;
import java.util.List;public class FindNonRepeatingChar {public static void main(String[] args) {System.out.println(printFirstNonRepeatingChar("abcaabcdedxy"));System.out.println(printFirstNonRepeatingChar("abca"));System.out.println(printFirstNonRepeatingChar("aaa"));}private static Character printFirstNonRepeatingChar(String string) {char[] chars = string.toCharArray();List<Character> discardedChars = new ArrayList<>();for (int i = 0; i < chars.length; i++) {char c = chars[i];if (discardedChars.contains(c))continue;for (int j = i + 1; j < chars.length; j++) {if (c == chars[j]) { // match founddiscardedChars.add(c);break;} else if (j == chars.length - 1) { // no match found till endreturn c;}}}return null;}
}

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

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

相关文章

定时器开发基础

1定时器的基本概述 通过滴漏和漏沙瓶这两个例子简单讲述定时器的基本工作原理。 STM32的常见的定时器资源&#xff1a; 系统嘀嗒定时器SysTick、看门狗定时器WatchDog、实时时钟RTC、基本定时器、通用定时器、高级定时器。 系统嘀嗒定时器SysTick &#xff1a;这是一个集成在C…

中移(苏州)软件技术有限公司面试问题与解答(2)—— Linux内核内存初始化的完整流程1

接前一篇文章&#xff1a;中移&#xff08;苏州&#xff09;软件技术有限公司面试问题与解答&#xff08;1&#xff09;—— 可信计算国密标准 本文参考以下文章&#xff1a; 启动期间的内存管理之初始化过程概述----Linux内存管理(九) Linux初始化 特此致谢&#xff01; 本…

JavaScript 自定义分页组件

仿boostrap 前端分页组件的实现 一 写一个前端自定义分页组件&#xff0c;需要考虑以下问题 需要一个<ul id"pagination"></ul>标签 total; // 总数据的数量 pageSize; // 一页显示数量 pageIndex; // 当前页 二 实现细节 编写html文件 index.html…

Debezium日常分享系列之:Debezium and TimescaleDB

Debezium日常分享系列之&#xff1a;Debezium and TimescaleDB 一、TimescaleDB二、完整案例三、Hypertables四、Continuous aggregates五、Compression六、结论 一、TimescaleDB TimescaleDB 是一个开源数据库&#xff0c;旨在使 SQL 对于时间序列数据具有可扩展性。它是作为…

代码随想录算法训练营第二十四天| 77. 组合

77. 组合 题目链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 解题思路&#xff1a;纵向遍历&#xff0c;遇到叶子节点返回上一节点 java&#xff1a; class Solution {List<List<Integer>> result new ArrayList&l…

ACL配置

ACL&#xff1a;访问控制列表 在路由器流量进或出接口上&#xff0c;匹配流量产生动作-- 允许 拒绝 &#xff08;访问限制&#xff09;定义感兴趣流量--- 匹配流量后&#xff0c;将流量提交给其他的协议进行策略 匹配规则&#xff1a; 至上而下逐一匹配&#xff0c;上条匹配…

蓝桥杯(C++ 整数删除 优先队列 )

优先队列&#xff1a; 优先队列具有队列的所有特性&#xff0c;包括队列的基本操作&#xff0c;只是在这基础上添加了内部的一个排序&#xff0c;它本质是一个堆实现的。 1.头文件&定义 #include <queue> #include <functional> //greater<>// 定义 p…

1d 卷积网络笔记

目录 这个是1d 卷积网络合集&#xff1a; resnet1d的 这个是1d 卷积网络合集&#xff1a; https://github.com/StChenHaoGitHub/1D-deeplearning-model-pytorch/blob/main/ResNet50.py resnet1d的 https://github.com/hsd1503/resnet1d

2023 年顶级前端工具

谁不喜欢一个好的前端工具&#xff1f;在本综述中&#xff0c;您将找到去年流行的有用的前端工具&#xff0c;它们将帮助您加快开发工作流程。让我们深入了解一下&#xff01; 在过去的 12 个月里&#xff0c;我在我的时事通讯 Web Tools Weekly 中分享了数百种工具。我为前端…

经典数据库练习题及答案

数据表介绍 --1.学生表 Student(SId,Sname,Sage,Ssex) --SId 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别 --2.课程表 Course(CId,Cname,TId) --CId 课程编号,Cname 课程名称,TId 教师编号 --3.教师表 Teacher(TId,Tname) --TId 教师编号,Tname 教师姓名 --4.成绩…

JavaScript DOM可以做什么?

1、通过id获取标签元素 DOM是文档对象模型&#xff0c;它提供了一些属性和方法来方便我们操作document对象&#xff0c;比如getElementById()方法可以通过某个标签元素的id来获取这个标签元素 // 用法 window.document.getElementById(id); // 例子 <!DOCTYPE html> &l…

深度学习模型之yolov8实例分割模型TesorRT部署-python版本

1 模型转换 从github上下载官方yolov8版本&#xff0c;当前使用的版本是2023年9月份更新的版本&#xff0c;作者一直在更新。官网地址 2 加载模型 模型的训练和测试在官方文档上&#xff0c;有详细的说明&#xff0c;yolov8中文文档这里不做过多说明&#xff0c;v8现在训练是…

C#设计模式教程(5):建造者模式

建造者模式的定义 建造者模式(Builder Pattern)是一种创建型设计模式,它允许你创建复杂对象的步骤分离,这样你可以使用相同的创建过程生成不同的表示。建造者模式通常用于处理那些包含多个成员变量的类,特别是当这些成员变量需要经过复杂步骤构建或者有大量可选参数时。 …

一个查看各个软件版本生命周期的网站

在做开发或学习时&#xff0c;经常翻文档找各个SDK版本的支持信息&#xff0c;比较麻烦。发现一个罗列 JDK、SpringBoot、PHP等常见的应用的生命周期追踪网站&#xff1a;https://endoflife.date/。 endoflife.date 目前追踪 286 个产品。

智能驾驶新浪潮:SSD与UFS存储技术如何破浪前行?-UFS篇

如果说SSD是赛道上的超级跑车&#xff0c;那UFS更像是专为智能汽车定制的高性能轻量化赛车。UFS采用串行接口技术&#xff0c;像是闪电侠一样&#xff0c;将数据传输的速度推向新高&#xff0c;大幅缩短了系统启动时间和应用程序加载时间&#xff0c;这对追求即时反应的ADAS系统…

从零开始的 dbt 入门教程 (dbt core 命令进阶篇)

引 根据第一篇文章的约定&#xff0c;我想通过接下来的几篇文章带大家进一步了解 dbt 的用法&#xff0c;原计划这篇文章我会介绍 dbt 命令的进阶用法&#xff0c;进一步认识 dbt 的配置以及如何创建增量表等等零零散散十几个方面的知识点&#xff0c;结果在我写完命令部分发现…

深度学习中Numpy的一些注意点(多维数组;数据类型转换、数组扁平化、np.where()、np.argmax()、图像拼接、生成同shape的图片)

文章目录 1多维数组压缩维度扩充维度 2numpy类型转换深度学习常见的float32类型。 3数组扁平化4np.where()的用法5np.argmax()6图像拼接7生成同shape的图片&#xff0c;指定数据类型 1多维数组 a.shape(3,2);既数组h3&#xff0c;w2 a.shape(2,3,2);这里第一个2表示axis0维度上…

Unity文字游戏开发日志(2)——存档与读档

存档与读档较为简单的实现 今天学习了如何存读档。 采用了Unity自带的方式PlayerPrefs 写了一个示例代码 功能是&#xff1a;建立一个名字的新档&#xff0c;每次打开游戏名字都会变。 PlayerPrefs.SetString("save","kkk");//创建名为save数据&#…

奇异值分解(SVD)【详细推导证明】

机器学习笔记 机器学习系列笔记&#xff0c;主要参考李航的《机器学习方法》&#xff0c;见参考资料。 第一章 机器学习简介 第二章 感知机 第三章 支持向量机 第四章 朴素贝叶斯分类器 第五章 Logistic回归 第六章 线性回归和岭回归 第七章 多层感知机与反向传播【Python实例…