📄 stringutil.java
字号:
throw new java.text.ParseException(
"Expecting letter, digit or \"_\" "
+ "here, (the first character of the key) but found "
+ jQuote(String.valueOf(c))
+ " at position " + p + ".",
p);
}
key = s.substring(keyStart, p);
// skip ws
while (p < ln) {
c = s.charAt(p);
if (!Character.isWhitespace(c)) {
break;
}
p++;
}
if (p == ln) {
if (defaultValue == null) {
throw new java.text.ParseException(
"Expecting \":\", but reached "
+ "the end of the string "
+ " at position " + p + ".",
p);
}
value = defaultValue;
} else if (c != ':') {
if (defaultValue == null || c != ',') {
throw new java.text.ParseException(
"Expecting \":\" here, but found "
+ jQuote(String.valueOf(c))
+ " at position " + p + ".",
p);
}
// skip ","
p++;
value = defaultValue;
} else {
// skip ":"
p++;
// skip ws
while (p < ln) {
c = s.charAt(p);
if (!Character.isWhitespace(c)) {
break;
}
p++;
}
if (p == ln) {
throw new java.text.ParseException(
"Expecting the value of the key "
+ "here, but reached the end of the string "
+ " at position " + p + ".",
p);
}
valueStart = p;
// seek value end
while (p < ln) {
c = s.charAt(p);
if (!(Character.isLetterOrDigit(c) || c == '_')) {
break;
}
p++;
}
if (valueStart == p) {
throw new java.text.ParseException(
"Expecting letter, digit or \"_\" "
+ "here, (the first character of the value) "
+ "but found "
+ jQuote(String.valueOf(c))
+ " at position " + p + ".",
p);
}
value = s.substring(valueStart, p);
// skip ws
while (p < ln) {
c = s.charAt(p);
if (!Character.isWhitespace(c)) {
break;
}
p++;
}
// skip ","
if (p < ln) {
if (c != ',') {
throw new java.text.ParseException(
"Excpecting \",\" or the end "
+ "of the string here, but found "
+ jQuote(String.valueOf(c))
+ " at position " + p + ".",
p);
} else {
p++;
}
}
}
// store the key-value pair
if (map.put(key, value) != null) {
throw new java.text.ParseException(
"Dublicated key: "
+ jQuote(key), keyStart);
}
}
return map;
}
/**
* @return whether the name is a valid XML tagname.
* (This routine might only be 99% accurate. Should maybe REVISIT)
*/
static public boolean isXMLID(String name) {
for (int i=0; i<name.length(); i++) {
char c = name.charAt(i);
if (i==0) {
if (c== '-' || c=='.' || Character.isDigit(c))
return false;
}
if (!Character.isLetterOrDigit(c) && c != ':' && c != '_' && c != '-' && c!='.') {
return false;
}
}
return true;
}
/**
* @return whether the qname matches the combination of nodeName, nsURI, and environment prefix settings.
*/
static public boolean matchesName(String qname, String nodeName, String nsURI, Environment env) {
String defaultNS = env.getDefaultNS();
if ((defaultNS != null) && defaultNS.equals(nsURI)) {
return qname.equals(nodeName)
|| qname.equals(Template.DEFAULT_NAMESPACE_PREFIX + ":" + nodeName);
}
if ("".equals(nsURI)) {
if (defaultNS != null) {
return qname.equals(Template.NO_NS_PREFIX + ":" + nodeName);
} else {
return qname.equals(nodeName) || qname.equals(Template.NO_NS_PREFIX + ":" + nodeName);
}
}
String prefix = env.getPrefixForNamespace(nsURI);
if (prefix == null) {
return false; // Is this the right thing here???
}
return qname.equals(prefix + ":" + nodeName);
}
/**
* Pads the string at the left with spaces until it reaches the desired
* length. If the string is longer than this length, then it returns the
* unchanged string.
*
* @param s the string that will be padded.
* @param minLength the length to reach.
*/
public static String leftPad(String s, int minLength) {
return leftPad(s, minLength, ' ');
}
/**
* Pads the string at the left with the specified character until it reaches
* the desired length. If the string is longer than this length, then it
* returns the unchanged string.
*
* @param s the string that will be padded.
* @param minLength the length to reach.
* @param filling the filling pattern.
*/
public static String leftPad(String s, int minLength, char filling) {
int ln = s.length();
if (minLength <= ln) {
return s;
}
StringBuffer res = new StringBuffer(minLength);
int dif = minLength - ln;
for (int i = 0; i < dif; i++) {
res.append(filling);
}
res.append(s);
return res.toString();
}
/**
* Pads the string at the left with a filling pattern until it reaches the
* desired length. If the string is longer than this length, then it returns
* the unchanged string. For example: <code>leftPad('ABC', 9, '1234')</code>
* returns <code>"123412ABC"</code>.
*
* @param s the string that will be padded.
* @param minLength the length to reach.
* @param filling the filling pattern. Must be at least 1 characters long.
* Can't be <code>null</code>.
*/
public static String leftPad(String s, int minLength, String filling) {
int ln = s.length();
if (minLength <= ln) {
return s;
}
StringBuffer res = new StringBuffer(minLength);
int dif = minLength - ln;
int fln = filling.length();
if (fln == 0) {
throw new IllegalArgumentException(
"The \"filling\" argument can't be 0 length string.");
}
int cnt = dif / fln;
for (int i = 0; i < cnt; i++) {
res.append(filling);
}
cnt = dif % fln;
for (int i = 0; i < cnt; i++) {
res.append(filling.charAt(i));
}
res.append(s);
return res.toString();
}
/**
* Pads the string at the right with spaces until it reaches the desired
* length. If the string is longer than this length, then it returns the
* unchanged string.
*
* @param s the string that will be padded.
* @param minLength the length to reach.
*/
public static String rightPad(String s, int minLength) {
return rightPad(s, minLength, ' ');
}
/**
* Pads the string at the right with the specified character until it
* reaches the desired length. If the string is longer than this length,
* then it returns the unchanged string.
*
* @param s the string that will be padded.
* @param minLength the length to reach.
* @param filling the filling pattern.
*/
public static String rightPad(String s, int minLength, char filling) {
int ln = s.length();
if (minLength <= ln) {
return s;
}
StringBuffer res = new StringBuffer(minLength);
res.append(s);
int dif = minLength - ln;
for (int i = 0; i < dif; i++) {
res.append(filling);
}
return res.toString();
}
/**
* Pads the string at the right with a filling pattern until it reaches the
* desired length. If the string is longer than this length, then it returns
* the unchanged string. For example: <code>rightPad('ABC', 9, '1234')</code>
* returns <code>"ABC412341"</code>. Note that the filling pattern is
* started as if you overlay <code>"123412341"</code> with the left-aligned
* <code>"ABC"</code>, so it starts with <code>"4"</code>.
*
* @param s the string that will be padded.
* @param minLength the length to reach.
* @param filling the filling pattern. Must be at least 1 characters long.
* Can't be <code>null</code>.
*/
public static String rightPad(String s, int minLength, String filling) {
int ln = s.length();
if (minLength <= ln) {
return s;
}
StringBuffer res = new StringBuffer(minLength);
res.append(s);
int dif = minLength - ln;
int fln = filling.length();
if (fln == 0) {
throw new IllegalArgumentException(
"The \"filling\" argument can't be 0 length string.");
}
int start = ln % fln;
int end = fln - start <= dif
? fln
: start + dif;
for (int i = start; i < end; i++) {
res.append(filling.charAt(i));
}
dif -= end - start;
int cnt = dif / fln;
for (int i = 0; i < cnt; i++) {
res.append(filling);
}
cnt = dif % fln;
for (int i = 0; i < cnt; i++) {
res.append(filling.charAt(i));
}
return res.toString();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -