Java-删除字符串的第一个字符


215

在Java中,我有一个String:

Jamaica

我想删除字符串的第一个字符,然后返回 amaica

我该怎么做?

Answers:


341

使用substring()参数为的函数1将子字符串从位置1(第一个字符之后)到字符串的末尾(第二个参数保留为默认值,则为字符串的完整长度)。

"Jamaica".substring(1);

21
重要的是要注意,这实际上并不会从字符串中删除字符,而是会为您提供一个新字符串,该字符串具有旧字符串中除第一个字符以外的所有字符。无法实际修改字符串。
克里斯·多德

该链接似乎不再有效。请改用以下链接:substring(int)
Christian Hoffmann,

1
是的,如果要删除字符串变量的前n个字符,请执行以下操作:variable = variable.substring(n);
MitulátBATI



47

在Java中,仅当它是某个特定字符时才删除它

使用Java三元运算符在删除字符之前快速检查您的字符是否在那里。这仅在存在前导字符时将其删除,如果传递了空白字符串,则返回blankstring。

String header = "";
header = header.startsWith("#") ? header.substring(1) : header;
System.out.println(header);

header = "foobar";
header = header.startsWith("#") ? header.substring(1) : header;
System.out.println(header);

header = "#moobar";
header = header.startsWith("#") ? header.substring(1) : header;
System.out.println(header);

印刷品:

blankstring
foobar
moobar

Java,删除字符串中任意位置的字符的所有实例:

String a = "Cool";
a = a.replace("o","");
//variable 'a' contains the string "Cl"

Java,删除字符串中任意位置的字符的第一个实例:

String b = "Cool";
b = b.replaceFirst("o","");
//variable 'b' contains the string "Col"

4
干:header = header.substring(header.startsWith("#") ? 1 : 0);
亚伦·布伦库什

3
或使用正则表达式:header = header.replaceFirst("^#","");
亚伦·布伦库什

18

您可以使用该类的子字符串方法,该方法String仅采用起始索引,然后返回以指定索引处的字符开始并延伸至字符串末尾的子字符串。

String str = "Jamaica";
str = str.substring(1);


11

用Java理解的关键是字符串是不可变的-您无法更改它们。因此,谈论“从字符串中删除字符”毫无意义。取而代之的是,仅使用所需字符创建一个NEW字符串。该问题中的其他文章为您提供了多种实现方法,但重要的是要了解这些方法不会以任何方式更改原始字符串。您对旧字符串的所有引用将继续引用旧字符串(除非您将其更改为引用其他字符串),并且不会受到新创建的字符串的影响。

这对性能有许多影响。每次“修改”字符串时,实际上都是在隐含所有开销(内存分配和垃圾回收)的情况下创建一个新的字符串。因此,如果您想对字符串进行一系列修改,而只关心最终结果(一旦“修改”中间字符串,它们就会死掉),那么改用StringBuilder或StringBuffer可能更有意义。


9

您可以这样:

String str="Jamaica";
str=str.substring(1, title.length());
return str;

或一般而言:

public String removeFirstChar(String str){
   return str.substring(1, title.length());
}

8

SUBSTRING()方法返回一个包含一个新的字符串序列当前包含在该序列的字符。

子字符串从指定的字符串开始,start并扩展到位于的字符index end - 1

它有两种形式。首先是

  1. String substring(int FirstIndex)

在这里,FirstIndex指定子字符串将开始的索引。此表单返回子字符串的副本,该副本从FirstIndex开始,一直运行到调用字符串的末尾。

  1. String substring(int FirstIndex, int endIndex)

在这里,FirstIndex指定开始索引,endIndex指定停止点。返回的字符串包含从开始索引到直到但不包括结束索引的所有字符。

    String str="Amiyo";
   // prints substring from index 3
   System.out.println("substring is = " + str.substring(3)); // Output "yo'

4

我遇到了一种情况,我不仅要删除第一个字符(如果是#,还要删除第一个字符)。

String myString = ###Hello World可能是起点,但我只想保留Hello World。这可以按照以下步骤进行。

while (myString.charAt(0) == '#') { // Remove all the # chars in front of the real string
    myString = myString.substring(1, myString.length());
}

对于OP的情况,请替换whileif,它同样适用。


1
如果myString ==“#”,则会出现问题,因为该字符串有时会超出范围。为防止这种情况,您可以这样做(!myString.isEmpty()&& myString.charAt(0))
Christian Christian

2

另一个解决方案,您可以使用replaceAll某些正则表达式^.{1}regex demo)解决问题,例如:

String str = "Jamaica";
int nbr = 1;
str = str.replaceAll("^.{" + nbr + "}", "");//Output = amaica

1

我删除主要字符(一个或多个)的版本。例如,字符串str1 =“ 01234”,当删除开头的'0'时,结果将为“ 1234”。对于字符串str2 =“ 000123”,结果将再次为“ 123”。对于String str3 =“ 000”,结果将为空字符串:“”。这种功能通常在将数字字符串转换为数字时很有用。与正则表达式(replaceAll(...))相比,此解决方案的优点是速度更快。在处理大量字符串时,这一点很重要。

 public static String removeLeadingChar(String str, char ch) {
    int idx = 0;
    while ((idx < str.length()) && (str.charAt(idx) == ch))
        idx++;
    return str.substring(idx);
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.