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

简介: 十个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+s2
        container.setSecondString(container.getFirstString().substring(0, container.getFirstString().length()-container.getSecondString().length())); // s2=s1
        container.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;
    }
    @Override
    public 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 found
                    discardedChars.add(c);
                    break;
                } else if (j == chars.length - 1) { // no match found till end
                    return c;
                }
            }
        }
        return null;
    }
}


目录
相关文章
|
3月前
|
安全 Java API
【Java字符串操作秘籍】StringBuffer与StringBuilder的终极对决!
【8月更文挑战第25天】在Java中处理字符串时,经常需要修改字符串,但由于`String`对象的不可变性,频繁修改会导致内存浪费和性能下降。为此,Java提供了`StringBuffer`和`StringBuilder`两个类来操作可变字符串序列。`StringBuffer`是线程安全的,适用于多线程环境,但性能略低;`StringBuilder`非线程安全,但在单线程环境中性能更优。两者基本用法相似,通过`append`等方法构建和修改字符串。
64 1
|
21天前
|
存储 安全 Java
Java零基础-字符串详解
【10月更文挑战第18天】Java零基础教学篇,手把手实践教学!
95 60
|
11天前
|
缓存 算法 Java
本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制
在现代软件开发中,性能优化至关重要。本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制。通过调整垃圾回收器参数、优化堆大小与布局、使用对象池和缓存技术,开发者可显著提升应用性能和稳定性。
33 6
|
1月前
|
Java 数据库
案例一:去掉数据库某列中的所有英文,利用java正则表达式去做,核心:去掉字符串中的英文
这篇文章介绍了如何使用Java正则表达式从数据库某列中去除所有英文字符。
46 15
|
1月前
|
Java
JAVA易错点详解(数据类型转换、字符串与运算符)
JAVA易错点详解(数据类型转换、字符串与运算符)
50 4
|
2月前
|
Java 数据库
java小工具util系列1:日期和字符串转换工具
java小工具util系列1:日期和字符串转换工具
51 3
|
2月前
|
SQL Java 索引
java小工具util系列2:字符串工具
java小工具util系列2:字符串工具
18 2
|
2月前
|
存储 移动开发 Java
java核心之字符串与编码
java核心之字符串与编码
21 2
|
2月前
|
Java
Java实现:将带时区的时间字符串转换为LocalDateTime对象
通过上述方法,你可以将带时区的时间字符串准确地转换为 `LocalDateTime`对象,这对于处理不需要时区信息的日期和时间场景非常有用。
726 4