【问题标题】:How to insert a space in a charArray in an exact position [Java]如何在 charArray 中的确切位置插入空格 [Java]
【发布时间】:2016-08-10 09:05:03
【问题描述】:

我的问题是我得到了一个String,我需要检查第四个位置是否有空格,但从最后开始。如果在这个位置没有空格,我应该插入它。

例如: 我得到这个字符串:TW12EF,需要这样得到它:TW1 2EF

首先,我得到一个 char array 中的最后 4 个字符,因为我还需要检查它们是数字还是字母。

用这个方法我检查是否有空格:

public static boolean isSpace(){
    return String.valueOf(charArray[0]).matches("[ \\t\\n\\x0B\\f\\r]");
}

charArray 包含输入 String 的最后 4 个字符

如果charArray[0] 不是空格,我想在第二个位置插入一个空格 (charArray[1])

如果我可以更正问题中的某些内容以使其更易于理解,请告诉我,我会努力改进下一个问题。

【问题讨论】:

  • 你总是有 0 或 1 个空格吗?空间是否总是在那个地方(如果存在的话)?
  • 您可以使用substring添加空格,如下所示:String string = "TW12EF"; // Your check String newString = string.substring(0, string.length() - 3) + " " + string.substring(string.length() - 3, string.length());
  • 是的,它应该只是以下选项之一:1 个空格或 0 个空格。如果用户引入更多的空间,那就错了。然后我会让用户知道他应该引入正确的代码。

标签: java arrays char


【解决方案1】:

一个简单直接的解决方案(很可能比使用正则表达式更快)是获取第 4 个到最后一个字符(如果存在),如果它不是空格,则在该位置插入一个空格.

public static void main(String[] args) {
    String str = "TW12EF";

    int insertPos = str.length() - 4;
    if (insertPos >= 0) {
        char ch = str.charAt(insertPos);
        if (!Character.isWhitespace(ch)) {
            str = new StringBuilder(str).insert(insertPos + 1, ' ').toString();
        }
    }

    System.out.println(str);
}

空格是通过调用isWhitespace 来确定的,它为空格返回true,但也为制表符或换行符返回true,就像您在问题中所做的那样。通过利用StringBuilder#insert 方法插入字符,该方法比获取两个子字符串并连接它们更直接。

【讨论】:

  • 效果很好,但我还需要检查最后三个字符是什么,并且我仍在将最后三个字符插入 charArray。这是检查它的好方法,还是太慢了?非常感谢您的回答,对我帮助很大。
  • @MarioJ.G.如果要检查最后 3 个字符,只需添加 3 次调用 charAt 并在每次返回字符时进行验证。这将非常直接和快速。
【解决方案2】:

一个快速的正则表达式会有所帮助:

String p = "TW12EF";
System.out.println(p.replaceAll("(.)\\s*(\\S.{2})$", "$1 $2")); // Select a character followed by 0 or more spaces and followed by 3 non-space characters. And replace multiple spaces if they exist with a single space

O/P:

TW1 2EF

如果在第 3 个字符(左起)之后有一个或多个空格,也可以使用

【讨论】:

  • 谢谢,成功了。但是,“脏”到底是什么意思?它只适用于我得到这样的代码=“TW12EF”的情况?我会尝试在 API 中阅读好的正则表达式来理解它,目前对我来说很困惑
  • @MarioJ.G. - ,我的意思是它难以阅读和维护。也很慢
  • 好的,现在“脏”是有意义的,非常感谢您的帮助:)
【解决方案3】:

由于 char 是原始数据类型,因此可以简单地进行比较

if (charArray[0] == ' ') {
    char[] temp = new char[5];
    temp[0] = ' ';
    for (int i = 1; i <= 4; i++) {
        temp[i] = charArray[i - 1];
    }
    charArray = temp;
}

【讨论】:

    【解决方案4】:

    你可以使用类似的东西:

        public static void main(String[] args) {
    
            String str = "TW12EF";
    
            processStr(str);
        }
    
        public static final int SPACE_POS = 4, OFFSET = 1;
        public static String processStr(String str)
        {
    
            if(!Character.isWhitespace(str.charAt(str.length() - SPACE_POS)))
            {
                str = String.format("%s %s", str.substring(0, str.length() - SPACE_POS + OFFSET), str.substring(SPACE_POS - OFFSET));
            }
    
            return str;
        }
    

    【讨论】:

      【解决方案5】:

      喜欢这个?

      `   String s="TW12EF";
          String result="";
          int length=s.length();
          for(int i=length-1;i>-1;i--){
              if(i==length-4&&s.charAt(i)!=' '){
                  result+=" ";
              }
              result+=s.charAt(length-i-1);
          }
          System.out.println(result);`
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-10-05
        • 2018-04-07
        • 1970-01-01
        • 2020-02-23
        • 2021-09-25
        • 2018-10-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多