**结束。**此问题需要详细的调试信息。它目前不接受答案。**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。
昨天关门了。改进这个问题我目前正在为一个学校项目做一个项目,而编程不是我的强项,尤其是在科维德事件之后。我目前面临的困难是找出一种有效的方法来显示文本文件中的字符串。我当前正在使用filereader读取文件:e、 g.文本文件包含数据驱动器我必须使用chars数组在整数和大写字母之间创建一个空格,还是有更好的方法?
pjngdqdw1#
幽灵的答案就在那里,除了 char 类型已过时。这种类型甚至不能表示unicode定义的、java支持的字符的一半。
char
相反,使用代码点整数。unicode的143859个字符中的每一个都使用一个超过一百万的范围来分配一个数字。例如: A =65=拉丁文大写字母a ♫ =9835=带束八分音符 ? =128567=带医用面罩的脸
A
♫
?
另外,我建议使用更简单、更清晰的变量名。
我们需要再加一个测试。对于输入,例如 W34QueensDrive 字母后面有数字,我们需要第三次测试:
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和字符集(没有借口!)。
Character.isTitleCase
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
2条答案
按热度按时间pjngdqdw1#
字符类型已过时
幽灵的答案就在那里,除了
char
类型已过时。这种类型甚至不能表示unicode定义的、java支持的字符的一半。代码点
相反,使用代码点整数。unicode的143859个字符中的每一个都使用一个超过一百万的范围来分配一个数字。
例如:
A
=65=拉丁文大写字母a♫
=9835=带束八分音符?
=128567=带医用面罩的脸更好的变量名
另外,我建议使用更简单、更清晰的变量名。
文本后面的数字
我们需要再加一个测试。对于输入,例如
W34QueensDrive
字母后面有数字,我们需要第三次测试:示例代码
下面是在另一个答案中看到的代码,但修改为使用代码点而不是
char
类型。当你跑的时候。
皇后大道34号
根据数据的语言,还可以通过调用
Character.isTitleCase
.对于背景信息,请阅读绝对最低每一个软件开发绝对,肯定必须知道unicode和字符集(没有借口!)。
xzabzqsa2#
非正则表达式解决方案:
测试运行: