Bas*_*que 13 java constants character
Java是否包含SPACE等单个字符的常量?
在进行字符串操作时,从Unicode获取名称会很方便.
我要这个:
String musician = "Lisa" + Character.SPACE + "Coleman" ;
Run Code Online (Sandbox Code Playgroud)
......而不是这个:
String musician = "Lisa" + " " + "Coleman" ;
Run Code Online (Sandbox Code Playgroud)
(不要与java.lang.Character类混淆)
如果没有与Java捆绑在一起的替代方案?
JB *_*zet 11
IMO没有这样的常数,而且有充分的理由.
为什么在示例中首先使用常量?
String musician = "Lisa" + Character.SPACE + "Coleman" ;
Run Code Online (Sandbox Code Playgroud)
不太可读
String musician = "Lisa Coleman";
Run Code Online (Sandbox Code Playgroud)
甚至比
String musician = "Lisa" + ' ' + "Coleman";
Run Code Online (Sandbox Code Playgroud)
所以我想这不是出于可读性的原因.
因此,我猜你想要一个常量,以避免在代码的几个部分重复自己.但是使用Character.SPACE而不是' '到处都不会导致重复次数减少.只有更冗长,更易读的代码.
因此我猜你想要能够在一个地方改变常数值,并在任何地方改变它.但是然后使用内置Character.SPACE常量将无法实现该目标.你仍然需要自己定,它的名字不应该是值是什么,但事情的价值是为:
private static final char FIRST_NAME_LAST_NAME_SEPARATOR = ' ';
Run Code Online (Sandbox Code Playgroud)
现在,有一个很好的理由使用该常量:如果您以后决定使用制表符而不是空格,则可以更改常量的值并重新编译所有代码.
下面的源代码为组成 Unicode 开头的 128 个 US-ASCII 字符定义了一个常量名称。
\n这里的方法使用static包含static字符串常量的嵌套类,128 个常量代表 128 个 US-ASCII 字符。通过嵌套类,我们启用了现代代码编辑器的智能预先输入填充建议功能。
可以使用嵌套接口代替类,但我不知道在内存或速度方面有什么好处。
\n当然你可以修改这段代码。例如,如果您只需要控制字符的名称,请摘录该嵌套类。
\npackage work.basil.unicode;\n\n@SuppressWarnings ( "unused" )\npublic final class Ascii\n{\n // -----------| US-ASCII character constants grouped via nested classes |--------------\n public static final class Control\n {\n public static final String NULL = Character.toString ( 0 );\n public static final String START_OF_HEADING = Character.toString ( 1 );\n public static final String START_OF_TEXT = Character.toString ( 2 );\n public static final String END_OF_TEXT = Character.toString ( 3 );\n public static final String END_OF_TRANSMISSION = Character.toString ( 4 );\n public static final String ENQUIRY = Character.toString ( 5 );\n public static final String ACKNOWLEDGE = Character.toString ( 6 );\n public static final String BEL = Character.toString ( 7 );\n public static final String BACKSPACE = Character.toString ( 8 );\n public static final String CHARACTER_TABULATION = Character.toString ( 9 );\n public static final String LINE_FEED_LF = Character.toString ( 10 );\n public static final String LINE_TABULATION = Character.toString ( 11 );\n public static final String FORM_FEED_FF = Character.toString ( 12 );\n public static final String CARRIAGE_RETURN_CR = Character.toString ( 13 );\n public static final String SHIFT_OUT = Character.toString ( 14 );\n public static final String SHIFT_IN = Character.toString ( 15 );\n public static final String DATA_LINK_ESCAPE = Character.toString ( 16 );\n public static final String DEVICE_CONTROL_ONE = Character.toString ( 17 );\n public static final String DEVICE_CONTROL_TWO = Character.toString ( 18 );\n public static final String DEVICE_CONTROL_THREE = Character.toString ( 19 );\n public static final String DEVICE_CONTROL_FOUR = Character.toString ( 20 );\n public static final String NEGATIVE_ACKNOWLEDGE = Character.toString ( 21 );\n public static final String SYNCHRONOUS_IDLE = Character.toString ( 22 );\n public static final String END_OF_TRANSMISSION_BLOCK = Character.toString ( 23 );\n public static final String CANCEL = Character.toString ( 24 );\n public static final String END_OF_MEDIUM = Character.toString ( 25 );\n public static final String SUBSTITUTE = Character.toString ( 26 );\n public static final String ESCAPE = Character.toString ( 27 );\n public static final String INFORMATION_SEPARATOR_FOUR = Character.toString ( 28 );\n public static final String INFORMATION_SEPARATOR_THREE = Character.toString ( 29 );\n public static final String INFORMATION_SEPARATOR_TWO = Character.toString ( 30 );\n public static final String INFORMATION_SEPARATOR_ONE = Character.toString ( 31 );\n public static final String DELETE = Character.toString ( 127 );\n }\n public static final class Punctuation\n {\n public static final String SPACE = Character.toString ( 32 );\n public static final String EXCLAMATION_MARK = Character.toString ( 33 );\n public static final String QUOTATION_MARK = Character.toString ( 34 );\n public static final String NUMBER_SIGN = Character.toString ( 35 );\n public static final String PERCENT_SIGN = Character.toString ( 37 );\n public static final String AMPERSAND = Character.toString ( 38 );\n public static final String APOSTROPHE = Character.toString ( 39 );\n public static final String LEFT_PARENTHESIS = Character.toString ( 40 );\n public static final String RIGHT_PARENTHESIS = Character.toString ( 41 );\n public static final String ASTERISK = Character.toString ( 42 );\n public static final String COMMA = Character.toString ( 44 );\n public static final String HYPHEN_MINUS = Character.toString ( 45 );\n public static final String FULL_STOP = Character.toString ( 46 );\n public static final String SOLIDUS = Character.toString ( 47 );\n public static final String COLON = Character.toString ( 58 );\n public static final String SEMICOLON = Character.toString ( 59 );\n public static final String QUESTION_MARK = Character.toString ( 63 );\n public static final String COMMERCIAL_AT = Character.toString ( 64 );\n public static final String LEFT_SQUARE_BRACKET = Character.toString ( 91 );\n public static final String REVERSE_SOLIDUS = Character.toString ( 92 );\n public static final String RIGHT_SQUARE_BRACKET = Character.toString ( 93 );\n public static final String LOW_LINE = Character.toString ( 95 );\n public static final String LEFT_CURLY_BRACKET = Character.toString ( 123 );\n public static final String RIGHT_CURLY_BRACKET = Character.toString ( 125 );\n }\n public static final class Symbol\n {\n public static final String DOLLAR_SIGN = Character.toString ( 36 );\n public static final String PLUS_SIGN = Character.toString ( 43 );\n public static final String LESS_THAN_SIGN = Character.toString ( 60 );\n public static final String EQUALS_SIGN = Character.toString ( 61 );\n public static final String GREATER_THAN_SIGN = Character.toString ( 62 );\n public static final String CIRCUMFLEX_ACCENT = Character.toString ( 94 );\n public static final String GRAVE_ACCENT = Character.toString ( 96 );\n public static final String VERTICAL_LINE = Character.toString ( 124 );\n public static final String TILDE = Character.toString ( 126 );\n }\n public static final class Digit\n {\n public static final String DIGIT_ZERO = Character.toString ( 48 );\n public static final String DIGIT_ONE = Character.toString ( 49 );\n public static final String DIGIT_TWO = Character.toString ( 50 );\n public static final String DIGIT_THREE = Character.toString ( 51 );\n public static final String DIGIT_FOUR = Character.toString ( 52 );\n public static final String DIGIT_FIVE = Character.toString ( 53 );\n public static final String DIGIT_SIX = Character.toString ( 54 );\n public static final String DIGIT_SEVEN = Character.toString ( 55 );\n public static final String DIGIT_EIGHT = Character.toString ( 56 );\n public static final String DIGIT_NINE = Character.toString ( 57 );\n }\n public static final class Uppercase\n {\n public static final String LATIN_CAPITAL_LETTER_A = Character.toString ( 65 );\n public static final String LATIN_CAPITAL_LETTER_B = Character.toString ( 66 );\n public static final String LATIN_CAPITAL_LETTER_C = Character.toString ( 67 );\n public static final String LATIN_CAPITAL_LETTER_D = Character.toString ( 68 );\n public static final String LATIN_CAPITAL_LETTER_E = Character.toString ( 69 );\n public static final String LATIN_CAPITAL_LETTER_F = Character.toString ( 70 );\n public static final String LATIN_CAPITAL_LETTER_G = Character.toString ( 71 );\n public static final String LATIN_CAPITAL_LETTER_H = Character.toString ( 72 );\n public static final String LATIN_CAPITAL_LETTER_I = Character.toString ( 73 );\n public static final String LATIN_CAPITAL_LETTER_J = Character.toString ( 74 );\n public static final String LATIN_CAPITAL_LETTER_K = Character.toString ( 75 );\n public static final String LATIN_CAPITAL_LETTER_L = Character.toString ( 76 );\n public static final String LATIN_CAPITAL_LETTER_M = Character.toString ( 77 );\n public static final String LATIN_CAPITAL_LETTER_N = Character.toString ( 78 );\n public static final String LATIN_CAPITAL_LETTER_O = Character.toString ( 79 );\n public static final String LATIN_CAPITAL_LETTER_P = Character.toString ( 80 );\n public static final String LATIN_CAPITAL_LETTER_Q = Character.toString ( 81 );\n public static final String LATIN_CAPITAL_LETTER_R = Character.toString ( 82 );\n public static final String LATIN_CAPITAL_LETTER_S = Character.toString ( 83 );\n public static final String LATIN_CAPITAL_LETTER_T = Character.toString ( 84 );\n public static final String LATIN_CAPITAL_LETTER_U = Character.toString ( 85 );\n public static final String LATIN_CAPITAL_LETTER_V = Character.toString ( 86 );\n public static final String LATIN_CAPITAL_LETTER_W = Character.toString ( 87 );\n public static final String LATIN_CAPITAL_LETTER_X = Character.toString ( 88 );\n public static final String LATIN_CAPITAL_LETTER_Y = Character.toString ( 89 );\n public static final String LATIN_CAPITAL_LETTER_Z = Character.toString ( 90 );\n }\n public static final class Lowercase\n {\n public static final String LATIN_SMALL_LETTER_A = Character.toString ( 97 );\n public static final String LATIN_SMALL_LETTER_B = Character.toString ( 98 );\n public static final String LATIN_SMALL_LETTER_C = Character.toString ( 99 );\n public static final String LATIN_SMALL_LETTER_D = Character.toString ( 100 );\n public static final String LATIN_SMALL_LETTER_E = Character.toString ( 101 );\n public static final String LATIN_SMALL_LETTER_F = Character.toString ( 102 );\n public static final String LATIN_SMALL_LETTER_G = Character.toString ( 103 );\n public static final String LATIN_SMALL_LETTER_H = Character.toString ( 104 );\n public static final String LATIN_SMALL_LETTER_I = Character.toString ( 105 );\n public static final String LATIN_SMALL_LETTER_J = Character.toString ( 106 );\n public static final String LATIN_SMALL_LETTER_K = Character.toString ( 107 );\n public static final String LATIN_SMALL_LETTER_L = Character.toString ( 108 );\n public static final String LATIN_SMALL_LETTER_M = Character.toString ( 109 );\n public static final String LATIN_SMALL_LETTER_N = Character.toString ( 110 );\n public static final String LATIN_SMALL_LETTER_O = Character.toString ( 111 );\n public static final String LATIN_SMALL_LETTER_P = Character.toString ( 112 );\n public static final String LATIN_SMALL_LETTER_Q = Character.toString ( 113 );\n public static final String LATIN_SMALL_LETTER_R = Character.toString ( 114 );\n public static final String LATIN_SMALL_LETTER_S = Character.toString ( 115 );\n public static final String LATIN_SMALL_LETTER_T = Character.toString ( 116 );\n public static final String LATIN_SMALL_LETTER_U = Character.toString ( 117 );\n public static final String LATIN_SMALL_LETTER_V = Character.toString ( 118 );\n public static final String LATIN_SMALL_LETTER_W = Character.toString ( 119 );\n public static final String LATIN_SMALL_LETTER_X = Character.toString ( 120 );\n public static final String LATIN_SMALL_LETTER_Y = Character.toString ( 121 );\n public static final String LATIN_SMALL_LETTER_Z = Character.toString ( 122 );\n }\n\n // Convenience method to return the code point integer number for the first and only character in the submitted string.\n public static int codePoint ( final String s )\n {\n Objects.requireNonNull ( s );\n if ( s.codePoints ( ).count ( ) != 1 )\n {\n throw new IllegalArgumentException ( "String must contain a single character, able to be represented by a single code point." );\n }\n return s.codePointAt ( 0 );\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n示例用法,生成“Hello World!”。
\nString helloWorld =\n Ascii.Uppercase.LATIN_CAPITAL_LETTER_H +\n Ascii.Lowercase.LATIN_SMALL_LETTER_E +\n Ascii.Lowercase.LATIN_SMALL_LETTER_L +\n Ascii.Lowercase.LATIN_SMALL_LETTER_L +\n Ascii.Lowercase.LATIN_SMALL_LETTER_O +\n Ascii.Punctuation.SPACE +\n Ascii.Uppercase.LATIN_CAPITAL_LETTER_W +\n Ascii.Lowercase.LATIN_SMALL_LETTER_O +\n Ascii.Lowercase.LATIN_SMALL_LETTER_R +\n Ascii.Lowercase.LATIN_SMALL_LETTER_L +\n Ascii.Lowercase.LATIN_SMALL_LETTER_D +\n Ascii.Punctuation.EXCLAMATION_MARK +\n Ascii.Control.LINE_FEED_LF +\n Ascii.Symbol.DOLLAR_SIGN +\n Ascii.Digit.DIGIT_ONE +\n Ascii.Digit.DIGIT_TWO +\n Ascii.Punctuation.FULL_STOP +\n Ascii.Digit.DIGIT_SEVEN +\n Ascii.Digit.DIGIT_ZERO +\n Ascii.Control.LINE_FEED_LF +\n Ascii.Symbol.GREATER_THAN_SIGN +\n Ascii.Control.LINE_FEED_LF +\n Ascii.Digit.DIGIT_ZERO;\n\nSystem.out.println ( helloWorld );\nRun Code Online (Sandbox Code Playgroud)\n跑步。
\nHello World!\n$12.70\n>\n0\nRun Code Online (Sandbox Code Playgroud)\n您可以使用提供的方法访问任何这些字符的代码点codePoint。此方法需要 只String包含一个字符的 。这种方法只是为了方便替代"A".codePointAt ( 0 )。
Ascii.codePoint ( Ascii.Uppercase.LATIN_CAPITAL_LETTER_A )\nRun Code Online (Sandbox Code Playgroud)\n\n\n65
\n
这是我编写的用于生成上面看到的源代码的代码。
\n如果您想将结果调整为您自己对分隔符、名称、分组等的偏好,您可能会发现这很有用。
\npackage work.basil.unicode;\n\nimport java.util.*;\n\n/*\n Generates source code for a .java class filled with constants naming each of the 128 US-ASCII\n characters that make up beginning of Unicode.\n These constant names may be helpful to the developer seeking to avoid "magic numbers"\n in their code when working with individual code points.\n Tip: You can get the code point integer number for any of these constant strings:\n Ascii.Uppercase.LATIN_CAPITAL_LETTER_A.codePointAt ( 0 ) -> 65\n\n For reference, see Unicode Consortium document "C0 Controls and Basic Latin Range: 0000\xe2\x80\x93007F"\n https://unicode.org/charts/PDF/U0000.pdf\n\n By Basil Bourque.\n*/\npublic class AsciiGenerator\n{\n // Fields\n private final SequencedCollection < Integer > control = new ArrayList <> ( );\n private final SequencedCollection < Integer > punctuation = new ArrayList <> ( );\n private final SequencedCollection < Integer > symbol = new ArrayList <> ( );\n private final SequencedCollection < Integer > digit = new ArrayList <> ( );\n private final SequencedCollection < Integer > uppercase = new ArrayList <> ( );\n private final SequencedCollection < Integer > lowercase = new ArrayList <> ( );\n private final SequencedCollection < SequencedCollection < Integer > > codePointGroups =\n List.of (\n this.control ,\n this.punctuation ,\n this.symbol ,\n this.digit ,\n this.uppercase ,\n this.lowercase\n );\n private final Map < SequencedCollection < Integer >, String > mapCodePointGroupToMethodName;\n\n // Constructor\n public AsciiGenerator ( )\n {\n this.populate ( );\n mapCodePointGroupToMethodName =\n Map.of (\n this.control , "Control" ,\n this.punctuation , "Punctuation" ,\n this.symbol , "Symbol" ,\n this.digit , "Digit" ,\n this.uppercase , "Uppercase" ,\n this.lowercase , "Lowercase"\n );\n }\n\n private void populate ( )\n {\n List < Byte > punctuationTypes = List.of (\n Character.CONNECTOR_PUNCTUATION ,\n Character.DASH_PUNCTUATION ,\n Character.END_PUNCTUATION ,\n Character.FINAL_QUOTE_PUNCTUATION ,\n Character.INITIAL_QUOTE_PUNCTUATION ,\n Character.OTHER_PUNCTUATION ,\n Character.START_PUNCTUATION );\n\n final int COUNT_OF_ASCII_CHARACTERS = 128;\n for ( int codePoint = 0 ; codePoint < COUNT_OF_ASCII_CHARACTERS ; codePoint++ )\n {\n switch ( Character.getType ( codePoint ) )\n {\n case Character.CONTROL -> this.control.add ( codePoint );\n case Character.CONNECTOR_PUNCTUATION ,\n Character.DASH_PUNCTUATION ,\n Character.END_PUNCTUATION ,\n Character.FINAL_QUOTE_PUNCTUATION ,\n Character.INITIAL_QUOTE_PUNCTUATION ,\n Character.OTHER_PUNCTUATION ,\n Character.START_PUNCTUATION ,\n Character.SPACE_SEPARATOR -> this.punctuation.add ( codePoint );\n case Character.CURRENCY_SYMBOL ,\n Character.MATH_SYMBOL ,\n Character.MODIFIER_SYMBOL -> this.symbol.add ( codePoint );\n case Character.DECIMAL_DIGIT_NUMBER -> this.digit.add ( codePoint );\n case Character.LOWERCASE_LETTER -> this.lowercase.add ( codePoint );\n case Character.UPPERCASE_LETTER -> this.uppercase.add ( codePoint );\n default -> System.out.println ( "ERROR Unexpected codePoint = " + codePoint + " | type = " + Character.getType ( codePoint ) );\n }\n }\n }\n\n public void dump ( )\n {\n this.codePointGroups.forEach ( System.out :: println ); // Dump each collection of code points.\n int total = this.codePointGroups.stream ( ).mapToInt ( Collection :: size ).sum ( ); // Count all the code points across all the collecions. Should be 128.\n System.out.println ( "Total number of code points: " + total );\n }\n\n public String generateSourceCodeForClassOfConstants ( )\n {\n final String INDENT = " ".repeat ( 4 ); // Indent four SPACE characters. Or perhaps one TAB character, if you like.\n final String EOL = "\\n"; // End-of-line terminator: LINE FEED. Or perhaps CR-LF, if you like.\n final StringBuilder sourceCode = new StringBuilder ( );\n sourceCode.append ( """\n package work.basil.unicode;\n \n @SuppressWarnings ( "unused" )\n public final class Ascii\n {\n """ );\n sourceCode.append ( """\n // -----------| US-ASCII character constants grouped via nested classes |--------------\n """ );\n\n for ( SequencedCollection < Integer > codePointGroup : codePointGroups )\n {\n String nestedClassName = mapCodePointGroupToMethodName.get ( codePointGroup );\n sourceCode\n .append ( INDENT )\n .append ( "public static final class " )\n .append ( n
| 归档时间: |
|
| 查看次数: |
17742 次 |
| 最近记录: |