📄 mnemonic.java
字号:
// Copyright (c) 2004 Brian Wellington (bwelling@xbill.org)package org.xbill.DNS;import java.util.HashMap;/** * A utility class for converting between numeric codes and mnemonics * for those codes. Mnemonics are case insensitive. * * @author Brian Wellington */class Mnemonic {private static Integer cachedInts[] = new Integer[64];static { for (int i = 0; i < cachedInts.length; i++) { cachedInts[i] = new Integer(i); }}/* Strings are case-sensitive. */static final int CASE_SENSITIVE = 1;/* Strings will be stored/searched for in uppercase. */static final int CASE_UPPER = 2;/* Strings will be stored/searched for in lowercase. */static final int CASE_LOWER = 3;private HashMap strings;private HashMap values;private String description;private int wordcase;private String prefix;private int max;private boolean numericok;/** * Creates a new Mnemonic table. * @param description A short description of the mnemonic to use when * @param wordcase Whether to convert strings into uppercase, lowercase, * or leave them unchanged. * throwing exceptions. */publicMnemonic(String description, int wordcase) { this.description = description; this.wordcase = wordcase; strings = new HashMap(); values = new HashMap(); max = Integer.MAX_VALUE;}/** Sets the maximum numeric value */public voidsetMaximum(int max) { this.max = max;}/** * Sets the prefix to use when converting to and from values that don't * have mnemonics. */public voidsetPrefix(String prefix) { this.prefix = sanitize(prefix);}/** * Sets whether numeric values stored in strings are acceptable. */public voidsetNumericAllowed(boolean numeric) { this.numericok = numeric;}/** * Converts an int into a possibly cached Integer. */public static IntegertoInteger(int val) { if (val >= 0 && val < cachedInts.length) return (cachedInts[val]); return new Integer(val);} /** * Checks that a numeric value is within the range [0..max] */public voidcheck(int val) { if (val < 0 || val > max) { throw new IllegalArgumentException(description + " " + val + "is out of range"); }}/* Converts a String to the correct case. */private Stringsanitize(String str) { if (wordcase == CASE_UPPER) return str.toUpperCase(); else if (wordcase == CASE_LOWER) return str.toLowerCase(); return str;}private intparseNumeric(String s) { try { int val = Integer.parseInt(s); if (val >= 0 && val <= max) return val; } catch (NumberFormatException e) { } return -1;}/** * Defines the text representation of a numeric value. * @param val The numeric value * @param string The text string */public voidadd(int val, String str) { check(val); Integer value = toInteger(val); str = sanitize(str); strings.put(str, value); values.put(value, str);}/** * Defines an additional text representation of a numeric value. This will * be used by getValue(), but not getText(). * @param val The numeric value * @param string The text string */public voidaddAlias(int val, String str) { check(val); Integer value = toInteger(val); str = sanitize(str); strings.put(str, value);}/** * Copies all mnemonics from one table into another. * @param val The numeric value * @param string The text string * @throws IllegalArgumentException The wordcases of the Mnemonics do not * match. */public voidaddAll(Mnemonic source) { if (wordcase != source.wordcase) throw new IllegalArgumentException(source.description + ": wordcases do not match"); strings.putAll(source.strings); values.putAll(source.values);}/** * Gets the text mnemonic corresponding to a numeric value. * @param val The numeric value * @return The corresponding text mnemonic. */public StringgetText(int val) { check(val); String str = (String) values.get(toInteger(val)); if (str != null) return str; str = Integer.toString(val); if (prefix != null) return prefix + str; return str;}/** * Gets the numeric value corresponding to a text mnemonic. * @param str The text mnemonic * @return The corresponding numeric value, or -1 if there is none */public intgetValue(String str) { str = sanitize(str); Integer value = (Integer) strings.get(str); if (value != null) { return value.intValue(); } if (prefix != null) { if (str.startsWith(prefix)) { int val = parseNumeric(str.substring(prefix.length())); if (val >= 0) { return val; } } } if (numericok) { return parseNumeric(str); } return -1;}}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -