JavaRush /Java 博客 /Random-ZH /Java 字符串。面试问题和答案,第 1 部分
Andrey
第 26 级

Java 字符串。面试问题和答案,第 1 部分

已在 Random-ZH 群组中发布
该类String是Java中使用最广泛的类之一。本文提供了一些重要的 Java String 面试问题和答案。 Java 字符串。 面试问题和答案,第 1 - 1 部分他们将非常有助于您全面了解课程String,并帮助您为任何与课程相关的面试问题做好准备String

1.Java中的String是什么?这是什么数据类型?

String是Java中的一个类,定义在java.lang包中。它不是像 int 和 long 这样的原始数据类型。String 类表示字符串字符集。几乎所有 Java 应用程序都使用字符串,并且我们应该了解一些有关 String 类的事实。immutable它是Java中的不可变(immutable )和最终确定的数据类型String,虚拟机将该类的所有对象存储在字符串池中。另一个特性是使用双引号和重载“+”运算符进行连接来 String获取类对象的方式。String

2. 创建 String 对象有哪些不同的方法?

我们可以像 Java 中的任何其他类一样使用 new 运算符创建对象,也可以使用双引号来创建对象String。还有几个类构造函数String用于从字符数组、字节数组以及使用StringBufferor获取字符串StringBuilder
String str = new String("abc");
String str1 = "abc";
当我们使用双引号创建字符串时,Java 虚拟机会在字符串池中查找具有相同值的另一个字符串。如果找到该字符串,则仅返回对该类的现有对象的引用String,否则使用接收到的值创建一个新对象并将其存储在池中。当我们使用new运算符时,虚拟机会创建一个对象String,但不会将其存储在字符串池中。我们可以使用该方法intern()将字符串存储在字符串池中,或者如果池中已经存在这样的字符串,则获取引用。

3. 编写一个方法来检查字符串是否为回文。

如果一个字符串在两个方向上读取相同,则称为回文。例如,“aba”是一个回文字符串。该类String没有提供任何反转字符串的方法,但类StringBuffer确实StringBuilder有一个反转方法,我们可以用它来检查字符串是否是回文。
private static boolean isPalindrome(String str) {
        if (str == null)
            return false;
        StringBuilder strBuilder = new StringBuilder(str);
        strBuilder.reverse();
        return strBuilder.toString().equals(str);
    }
有时面试官可能会要求不要使用其他类进行此检查,这种情况下我们可以比较字符串两边的字符来检查回文。
private static boolean isPalindromeString(String str) {
        if (str == null)
            return false;
        int length = str.length();
        System.out.println(length / 2);
        for (int i = 0; i < length / 2; i++) {

            if (str.charAt(i) != str.charAt(length - i - 1))
                return false;
        }
        return true;
    }

4. 编写一个从字符串中删除给定字符的方法。

我们可以使用一种方法replaceAll将所有出现的字符串替换为另一个字符串。请注意,该方法采用字符串作为参数,因此我们使用该类Character从字符创建字符串,并使用它用空字符串替换所有字符。
private static String removeChar(String str, char ch) {
        if (str == null)
            return null;
        return str.replaceAll(Character.toString(ch), "");
    }

5. 如何将字符串转换为大写或小写?

我们可以使用类方法String toUpperCasetoLowerCace获取大写和小写字符串。这些方法有一个重载,它接受一个参数Locale并使用其本地化规则将字符串转换为大写或小写。

6. subSequence 方法有什么作用?

Java 1.4引入了接口CharSequence,类继承这个接口,这是在类中String实现方法的唯一原因。它在内部调用. 使用该方法的一个简单示例: subSequenceStringsubstring
public class StringSubsequence {

    public static void main(String[] args) {
        String str = "www.journaldev.com";
        System.out.println("Last 4 char String: "+str.subSequence(str.length()-4, str.length()));
        System.out.println("First 4 char String: "+str.subSequence(0, 4));
        System.out.println("website name: "+str.subSequence(4, 14));

        //substring vs subSequence
        System.out.println("substring == subSequence ? "
			+(str.substring(4, 14) == str.subSequence(4, 14)));

        System.out.println("substring equals subSequence ? "
			+(str.substring(4, 14).equals(str.subSequence(4, 14))));
    }
}
程序的输出将显示以下内容:
Last 4 char String: .com
First 4 char String: www.
website name: journaldev
substring == subSequence ? false
substring equals subSequence ? true
理想情况下,您应该始终使用substring.

7. Java中如何比较两个字符串?

该类String继承了接口Comparable并有两个方法选项compareTo()。该方法按字典顺序compareTo(String anotherString)将对象String与接收到的参数进行比较String。如果当前行位于接收到的字符串之前,则该方法返回一个负整数,如果该字符串位于接收到的参数之后,则返回一个正整数integer。如果该方法返回 0,则该字符串具有相同的值,在这种情况下该方法equals(String str)也将返回 true。 compareToIgnoreCase(String str):此方法与前一种类似,只是忽略大小写。它使用 CASE_INSENSITIVE_ORDER 比较器进行不区分大小写的比较。如果返回值为零,则该方法equalsIgnoreCase(String str)也将返回 true。让我们看一个小例子来解释这些方法:
public class StringCompareToExample {
    public static void main(String[] args) {
        String str = "ABC";
        System.out.println(str.compareTo("DEF"));
        System.out.println(str.compareToIgnoreCase("abc"));
    }
}
该程序将输出以下内容:
-3
0

8. 如何将字符串转换为字符,反之亦然?

这是一个棘手的问题,因为字符串是字符序列,因此我们只能将其转换为单个字符。我们可以使用方法charAt来获取位于指定位置的字符,也可以使用方法toCharArray()将字符串转换为字符数组。一个简单的例子展示了如何在Java中将字符串转换为字符以及字符转换为字符串。
import java.util.Arrays;

public class StringToCharToString {
    public static void main(String[] args) {
        //String to char array
        String str = "123";
        char[] chArr = str.toCharArray();
        System.out.println("String to char array: "+Arrays.toString(chArr));
        //String to char
        char c = str.charAt(1);
        System.out.println("String to char: "+c);
        //char to String
        String s = Character.toString(c);
        System.out.println("char to String: "+s);
        //удалить все заданные символы из строки
        System.out.println("removing all chars from String: "
                                 +removeCharFromString("1ABCD12DW", '1'));
    }

    private static String removeCharFromString(String str, char c) {
        return str.replaceAll(Character.toString( c ), "");
    }
}
该程序将输出以下内容:
String to char array: [1, 2, 3]
String to char: 2
char to String: 2
removing all chars from String: ABCD2DW

9. 如何将字符串转换为字节数组,反之亦然?

我们可以使用方法getBytes()将字符串转换为字节数组,也可以使用构造函数new String(byte[] arr)将字节数组转换为字符串。
import java.util.Arrays;

public class StringByteArray {
     public static void main(String[] args) {
        String str = "www.journaldev.com";
        //преобразование String в byte array
        byte[] byteArr = str.getBytes();
        System.out.println("String to byte array : "+Arrays.toString(byteArr));
        //преобразование byte array и String
        String str1 = new String(byteArr);
        System.out.println("byte array to String : "+str1);
        //посмотрим, str и str1 одинаковые or нет
        System.out.println("str == str1? " + (str == str1));
        System.out.println("str.equals(str1)? " + (str.equals(str1)));
    }
}
该程序将输出以下内容:
String to byte array : [119, 119, 119, 46, 106, 111, 117, 114, 110, 97, 108, 100, 101, 118, 46, 99, 111, 109]
byte array to String : www.journaldev.com
str == str1? false
str.equals(str1)? true

10. 我们可以在 switch 结构中使用字符串吗?

这个棘手的问题用于测试您对该语言当前发展的了解。Java 7 扩展了switch 语句以使用字符串;早期版本的 Java 不支持这一点。如果要实现字符串的条件流,则可以使用 if-else 条件,并且如果使用 Java 7 或更高版本,则可以使用 switch 语句。在语句中使用字符串的小示例switch以及使用条件显示相同逻辑的另一种方法if-else
public class SwitchStringExample {

    public static void main(String[] args) {
        printColorUsingSwitch("red");
        printColorUsingIf("red");
        // оператор switch регистрозависимый
        printColorUsingSwitch("RED");
        printColorUsingSwitch(null);
    }

    private static void printColorUsingIf(String color) {
        if (color.equals("blue")) {
            System.out.println("BLUE");
        } else if (color.equals("red")) {
            System.out.println("RED");
        } else {
            System.out.println("INVALID COLOR CODE");
        }
    }

    private static void printColorUsingSwitch(String color) {
        switch (color) {
        case "blue":
            System.out.println("BLUE");
            break;
        case "red":
            System.out.println("RED");
            break;
        default:
            System.out.println("INVALID COLOR CODE");
        }
    }
}
该程序将输出以下内容:
RED
RED
INVALID COLOR CODE
Exception in thread "main"
java.lang.NullPointerException
    at com.journaldev.util.SwitchStringExample.printColorUsingSwitch(SwitchStringExample.java:24)
    at com.journaldev.util.SwitchStringExample.main(SwitchStringExample.java:10)
Java 中字符串的关键使用点switch
  • 在设计中使用字符串switch可以消除多个条件链,从而使代码更具可读性if-else
  • 中的字符串switch区分大小写,上面的示例说明了这一点。
  • 运算符switch使用一种方法String.equals()将结果值与case值进行比较,因此添加对 NULL 的检查以避免NullPointerException
  • 根据 Java 7 字符串文档switch,Java 编译器为构造中的字符串生成switch比串联条件更有效的字节码if-else
  • 确保这将与 Java 7 或更高版本一起使用,否则您将得到xception.

11. 编写一个程序来打印字符串的所有排列。

这是一个棘手的问题,我们必须使用递归来找到字符串的所有排列,例如“AAB”的排列可能是“AAB”、“ABA”和“BAA”。我们还需要使用 Set 来确保没有重复的行。为了获得所有排列,我们首先获取字符串的第一个字符并重新排列其余字符。如果 String = “ABC” 第一个字符 char = A,其余排列 BC 和 CB。现在我们可以将第一个字符插入到排列中的可用位置。BC -> ABC、BAC、BCA CB -> ACB、CAB、CBA 示例程序:
import java.util.HashSet;
import java.util.Set;

public class StringHelper {
    public static Set<String> permutationFinder(String str) {
        Set<String> perm = new HashSet<String>();
        //Handling error scenarios
        if (str == null) {
            return null;
        } else if (str.length() == 0) {
            perm.add("");
            return perm;
        }
        char initial = str.charAt(0); // первый символ
        String rem = str.substring(1); // полная строка без первого символа
        Set<String> words = permutationFinder(rem);
        for (String strNew : words) {
            for (int i = 0;i<=strNew.length();i++){
                perm.add(charInsert(strNew, initial, i));
            }
        }
        return perm;
    }

    public static String charInsert(String str, char c, int j) {
        String begin = str.substring(0, j);
        String end = str.substring(j);
        return begin + c + end;
    }

    public static void main(String[] args) {
        String s = "AAC";
        String s1 = "ABC";
        String s2 = "ABCD";
        System.out.println("\nPermutations for " + s + " are: \n" + permutationFinder(s));
        System.out.println("\nPermutations for " + s1 + " are: \n" + permutationFinder(s1));
        System.out.println("\nPermutations for " + s2 + " are: \n" + permutationFinder(s2));
    }
}
程序输出:
Permutations for AAC are:
[AAC, ACA, CAA]

Permutations for ABC are:
[ACB, ABC, BCA, CBA, CAB, BAC]

Permutations for ABCD are:
[DABC, CADB, BCAD, DBAC, BACD, ABCD, ABDC, DCBA, ADBC, ADCB, CBDA, CBAD, DACB, ACBD, CDBA, CDAB, DCAB, ACDB, DBCA, BDAC, CABD, BADC, BCDA, BDCA]
文章的继续
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION