Java11:从字符串中删除第一个字符

Java11:从字符串中删除第一个字符,java,string,character,remove,Java,String,Character,Remove,我正在尝试CodeWar的一个小练习,我几乎完成了。 我最后一次尝试是删除字符串的第一个字符, 但有趣的是,一个输出已经起作用了,但另一个没有: 输出1:R\u L变为:\u L(当它呼喊时) 我们的计算2:_ABC变成:_ABC(它没有删除字符??) 在下面的代码中,我使用.substring(1)删除字符, 但我也尝试了StringBuilder与deletechar()的结合 我也有同样的结果 请检查代码,可以证明它是超基本的,但我找不到 import java.util.stream.C

我正在尝试CodeWar的一个小练习,我几乎完成了。 我最后一次尝试是删除字符串的第一个字符, 但有趣的是,一个输出已经起作用了,但另一个没有:

输出1:R\u L变为:\u L(当它呼喊时)

我们的计算2:_ABC变成:_ABC(它没有删除字符??)

在下面的代码中,我使用.substring(1)删除字符, 但我也尝试了StringBuilder与deletechar()的结合 我也有同样的结果

请检查代码,可以证明它是超基本的,但我找不到

import java.util.stream.Collectors;
import java.util.Arrays;
import java.util.List;
import java.lang.*;

// MISSION: Remove all the WUB's from the String

// Brianstorm - Roadmap
  // remove WUB from WUBWUBABCWUB or RWUBWUBWUBLWUB
  // String to char list
  // loop list i++
  // get index i, i+1, i+2    (in the 1ste loop would be WUB or RWU)
  // join indexes             ("WUB" or "RWU")
  // if (indexes == WUB) Remove indexes from char list and set i to 0
  // else { // do nothing and continue loop }
  // finish loop
  // convert character list to String
  // output string



public class Dubstep {

  public static String SongDecoder (String song) {

     // String to Char list
     char[] songChars = song.toCharArray();

     // loop list
     for ( int i=0; i < songChars.length-2; i++ ) {

      // Convert Char to numeric value
       int W = Character.getNumericValue(songChars[i]);
       int U = Character.getNumericValue(songChars[i+1]);
       int B = Character.getNumericValue(songChars[i+2]);


      // if indexes are W U B,
      if ( W == 32 && U == 30 && B == 11 ) {

         // System.out.println("We found a WUB");

         // replace INDEXES with null value
         songChars[i] = '\0';
         songChars[i+1] = '\0';
         songChars[i+2] = '\0';

      } // end statement

      } // end loop


// Apply Spaces in between words
// Output example: not like this: RL, but this: R_L

      for ( int i=1; i < songChars.length; i++ ) {

        // Convert index to numeric value
        int x = Character.getNumericValue(songChars[i]);
        int y = Character.getNumericValue(songChars[i-1]);

        // apply space inbetween words
        if (  x != -1 && y == -1 ) {
          songChars[i-1] = '_';
        }

      } // end loop

            // Char list to string & remove null's
            String songOut = new String(songChars);

            // remove first index of the string
            String removeChar = songOut.substring(1);


       return removeChar;
  }


 public static void main(String[] args) {

   String Deco1 = SongDecoder("WUBWUBABCWUB");
   System.out.println(Deco1);

   String Deco2 = SongDecoder("RWUBWUBWUBLWUB");
   System.out.println(Deco2);
 }

}
import java.util.stream.collector;
导入java.util.array;
导入java.util.List;
导入java.lang.*;
//任务:从字符串中移除所有WUB
//Brianstorm-路线图
//从WubwubbcWub或Rwubwubwubwub移除WUB
//字符串到字符列表
//循环列表i++
//获取索引i、i+1、i+2(在1ste循环中为WUB或RWU)
//连接索引(“WUB”或“RWU”)
//如果(indexes==WUB)从char列表中删除索引并将i设置为0
//否则{//不执行任何操作并继续循环}
//结束循环
//将字符列表转换为字符串
//输出字符串
公共类Dubstep{
公共静态字符串歌曲解码器(字符串歌曲){
//字符串到字符列表
char[]songChars=song.toCharArray();
//循环列表
for(int i=0;i
歌曲不仅仅是“ABC”。 它还包含您添加的“\0”。 它们也是字符串的一部分。 打印字符串时,只会看到可见字符。 您看不到的“\0”

试着把歌曲的长度打印出来,你会发现它比ABC长

将“\0”替换为“\n”,您的打印输出将包含许多新行

rwubwubwub将R作为第一个字符。
然后它作为第一个字符结束。

您可以尝试通过先将歌曲传出来调试它,看看它是否真的是不起作用的子字符串(1)。那么你会得到什么呢?想想也许在不起作用的情况下,第一个角色并不是你想象的那样。也许中间也有你不想要的角色。我让它工作了,但是需要
trim()
replace()
来获得预期的输出,而不仅仅是
substring()
。thx只是另一个开发者,thim()函数以前从未听说过它,但它非常适合这种情况。但我仍然不明白为什么我会有这个问题。不确定“第一个字符不是您认为的”是什么意思?当“\0”是字符串中的第一个或最后一个字符时,修剪将起作用。不在其他字符之间。它们仍然存在,字符串不仅仅是R\u L,而是R\0\0\u L(或类似的东西)