如何在字符数和大小写之间添加空格(反之亦然)?

sdnqo3pr  于 2021-07-12  发布在  Java
关注(0)|答案(2)|浏览(345)

**结束。**此问题需要详细的调试信息。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。

昨天关门了。
改进这个问题
我目前正在为一个学校项目做一个项目,而编程不是我的强项,尤其是在科维德事件之后。我目前面临的困难是找出一种有效的方法来显示文本文件中的字符串。
我当前正在使用filereader读取文件:
e、 g.文本文件包含数据驱动器
我必须使用chars数组在整数和大写字母之间创建一个空格,还是有更好的方法?

pjngdqdw

pjngdqdw1#

字符类型已过时

幽灵的答案就在那里,除了 char 类型已过时。这种类型甚至不能表示unicode定义的、java支持的字符的一半。

代码点

相反,使用代码点整数。unicode的143859个字符中的每一个都使用一个超过一百万的范围来分配一个数字。
例如: A =65=拉丁文大写字母a =9835=带束八分音符 ? =128567=带医用面罩的脸

更好的变量名

另外,我建议使用更简单、更清晰的变量名。

文本后面的数字

我们需要再加一个测试。对于输入,例如 W34QueensDrive 字母后面有数字,我们需要第三次测试:

( ! Character.isDigit( previousCodePoint ) && Character.isDigit( codePoint ) )

示例代码

下面是在另一个答案中看到的代码,但修改为使用代码点而不是 char 类型。

// Modified form of code written by Spectric at https://stackoverflow.com/a/67220790/642706

StringBuilder stringBuilder = new StringBuilder();
String s = "W34QueensDrive";  //  "?34QueensDrive";
int[] codePoints = s.codePoints().toArray();
for ( int i = 0 ; i < codePoints.length ; i++ )
{
    int codePoint = codePoints[ i ];
    if ( i != 0 )
    {
        int previousCodePoint = codePoints[ i - 1 ];
        if (
                ( ! Character.isDigit( previousCodePoint ) && Character.isDigit( codePoint ) )
                        ||
                        ( Character.isDigit( previousCodePoint ) && ! Character.isDigit( codePoint ) )
                        ||
                        ( Character.isLowerCase( previousCodePoint ) && Character.isUpperCase( codePoint ) )
        )
        {
            stringBuilder.append( " " );
        }
        stringBuilder.appendCodePoint( codePoint );
    } else
    {
        stringBuilder.appendCodePoint( codePoint );
    }
}
String result = stringBuilder.toString();

System.out.println( result );

当你跑的时候。
皇后大道34号
根据数据的语言,还可以通过调用 Character.isTitleCase .
对于背景信息,请阅读绝对最低每一个软件开发绝对,肯定必须知道unicode和字符集(没有借口!)。

xzabzqsa

xzabzqsa2#

非正则表达式解决方案:

String s = "34QueensDrive";
int len = s.length();
StringBuilder newString = new StringBuilder();
for (int i = 0; i < len; i++) {
  char cur = s.charAt(i);
  if (i != 0) {
    char b4 = s.charAt(i - 1);
    if ((Character.isDigit(b4) && !Character.isDigit(cur)) || (Character.isLowerCase(b4) && Character.isUpperCase(cur))) {
      newString.append(" ");
    }
    newString.append(cur);
  } else {
    newString.append(cur);
  }
}
System.out.println(newString.toString());

测试运行:

34QueensDrive = 34 Queens Drive
34QueensDriveAvenue = 34 Queens Drive Avenue

相关问题