Package Torello.Java
Class StringParse
- java.lang.Object
-
- Torello.Java.StringParse
-
public class StringParse extends java.lang.Object
StringParse - Documentation.
These are some commonly used helper functions that were utilized when the project began. As the project grows morejava.lang.String
Utilities are added, here and there. Likely, there are probably methods that exist in libraries available somewhere in someone else' jar files. Possibly Apache Commons has a method similar toStringParse.leftSpacePad(...)
- but since the complete set of Helper Utilities that are provided inpackage Torello.Java.*;
are very detailed and numerous, home grown helper and utility functions are used, rather than trying to figure out Apache, or other's jar-libraries. Quite a number of these really just seem like naming conventions for properly formatted dates and times that avoid getting too complicated with Java'sclass 'Calendar'
or Java'sjava.text.*
package.
Hi-Lited Source-Code:
- View Here: Torello/Java/StringParse.java
- Open New Browser-Tab: Torello/Java/StringParse.java
Stateless Class:
This class neither contains any program-state, nor can it be instantiated.
The
The
@StaticFunctional
Annotation may also be called 'The Spaghetti Report'- 1 Constructor(s), 1 declared private, zero-argument constructor
- 73 Method(s), 73 declared static
- 19 Field(s), 19 declared static, 19 declared final
-
-
Field Summary
Regular-Expressions Modifier and Type Field static Pattern
ALPHA_NUMERIC
static Pattern
COMMA_REGEX
static Pattern
GENERIC_PARAMS
static Pattern
NEWLINEP
static Pattern
NUMBER_COMMMA_REGEX
static Pattern
PACKAGE_NAME
static Pattern
WHITE_SPACE_REGEX
Predicate Modifier and Type Field static Predicate<String>
alphaNumPred
static Predicate<String>
newLinePred
String Modifier and Type Field static String
REG_EX_ESCAPE_CHARS
Protected Arrays Modifier and Type Field protected static char[]
JS_ESCAPE_CHARS
protected static char[]
REGEX_ESCAPE_CHARS
-
Method Summary
General Methods Modifier and Type Method static String
commas(long l)
static int
countCharacters(String s, char c)
static String
delChar(String str, int i)
static String
firstWord(String s)
static boolean
hasWhiteSpace(String s)
static String
leftSpacePad(String s, int totalStringLength)
static String
removeDuplicateSpaces(String s)
static String
removeWhiteSpace(String s)
static String
rightSpacePad(String s, int totalStringLength)
static String
setChar(String str, int i, char c)
static String
trimLeft(String s)
static String
trimRight(String s)
File, Directory & URL Strings Modifier and Type Method static String
beforeExtension(String file)
static String
beforeLastFileSeparatorPos(String urlOrDir)
static String
beforeLastFrontSlashPos(String urlOrDir)
static String
dotDotParentDirectory(String urlAsStr)
static String
dotDotParentDirectory(String directoryStr, char dirSeparator)
static String
dotDotParentDirectory(String directoryStr, char separator, short nLevels)
static String
dotDotParentDirectory(String urlAsStr, short nLevels)
static String
dotDotParentDirectory(URL url)
static String
dotDotParentDirectory(URL url, short nLevels)
static String
dotDots(String fileName, String ancestorDirectory, char separator)
static int
findExtension(String file, boolean includeDot)
static int
findLastFileSeparatorPos(String fileOrDir)
static int
findLastFrontSlashPos(String urlOrDir)
static String
findURLRoot(String url)
static String
fromExtension(String file, boolean includeDot)
static String
fromLastFileSeparatorPos(String fileOrDir)
static String
fromLastFrontSlashPos(String urlOrDir)
Date & Time Modifier and Type Method static String
dateStr()
static String
dateStr(char separator)
static String
dateStr(char separator, boolean includeMonthName)
static String
dateStrGOVCN()
static String
monthStr(int month)
static String
timeStr()
static String
timeStr(char separator)
static String
timeStrComplete()
static String
ymDateStr()
static String
ymDateStr(char separator)
static String
ymDateStr(char separator, boolean includeMonthName)
Number Strings Modifier and Type Method static boolean
isByte(String s)
static boolean
isInt(String s)
static boolean
isInteger(String s)
static boolean
isLong(String s)
protected static boolean
isOfPrimitiveType(String s, char[] minArr)
static boolean
isShort(String s)
static String
ordinalIndicator(int i)
static String
zeroPad(int n)
static String
zeroPad(int n, int powerOf10)
static String
zeroPad10e2(int n)
static String
zeroPad10e4(int n)
Base64 Object Serialization Modifier and Type Method static Object
b64MimeStrToObj(String str)
static Object
b64StrToObj(String str)
static String
objToB64MimeStr(Object o)
static String
objToB64Str(Object o)
Parentheticals Modifier and Type Method static String
removeAllParenthetical(String s)
static String
removeBraces(String s)
static String
removeBrackets(String s)
static String
removeParens(String s)
HTML & Source-Code Strings Modifier and Type Method static String
escStrForJavaScript(String str)
static String
escStrForRegEx(String str)
static String
grep_HREF_tag(String s)
static String
grep_IMG_SRC_tag(String s)
static String
ifQuotesStripQuotes(String s)
static String[]
parseGenericType(String genericTypeParamOrDefinition)
static String
replaceNBSP(String s)
static String
replaceZWSP(String s)
Lines of Text Modifier and Type Method static String
firstNLines(String s, int n)
static String
lastNLines(String s, int n)
static String
line(String s, int pos)
static String
lineOrLines(String s, int pos, int len, String unixColorCode)
static String
trimEachLine(String str)
-
-
-
Field Detail
-
WHITE_SPACE_REGEX
public static final java.util.regex.Pattern WHITE_SPACE_REGEX
This regular expression simply matches white-space found in a javaString
.- See Also:
removeWhiteSpace(String)
- Code:
- Exact Field Declaration Expression:
1
public static final Pattern WHITE_SPACE_REGEX = Pattern.compile("\\s+");
-
COMMA_REGEX
public static final java.util.regex.Pattern COMMA_REGEX
This regular expression simply matches the comma. The only reason for including this here is because the javaclass 'Pattern'
contains a method calledStream<String> 'splitAsStream(CharSequence)'
which is used for the CSV method further below- See Also:
StrCSV.CSV(String, boolean, boolean)
,FileRW.readDoublesFromFile(String, boolean, boolean)
,FileRW.readLongsFromFile(String, boolean, boolean, int)
- Code:
- Exact Field Declaration Expression:
1
public static final Pattern COMMA_REGEX = Pattern.compile(",");
-
NUMBER_COMMMA_REGEX
public static final java.util.regex.Pattern NUMBER_COMMMA_REGEX
This regular expression is used for integer and floating-point numbers that use the comma (','
) between the digits that comprise the number. For example, this Regular Expression would match theString
"900,800,75.00"
.- See Also:
FileRW.readIntsFromFile(String, boolean, boolean, int)
- Code:
- Exact Field Declaration Expression:
1
public static final Pattern NUMBER_COMMMA_REGEX = Pattern.compile("(\\d),(\\d)");
-
NEWLINEP
public static final java.util.regex.Pattern NEWLINEP
This represents any version of the new-line character. Note that the'\r\n'
version comes before the single'\r'
version in the regular-expression, to guarantee that if both are present, they are treated as a single newline.- Code:
- Exact Field Declaration Expression:
1
public static final Pattern NEWLINEP = Pattern.compile("\\r\\n|\\r|\\n");
-
newLinePred
public static final java.util.function.Predicate<java.lang.String> newLinePred
Predicate for new-line characters- See Also:
NEWLINEP
- Code:
- Exact Field Declaration Expression:
1
public static final Predicate<String> newLinePred = NEWLINEP.asPredicate();
-
GENERIC_PARAMS
public static final java.util.regex.Pattern GENERIC_PARAMS
This will match the definition for a java'Generic'
class or interface- Code:
- Exact Field Declaration Expression:
1
public static final Pattern GENERIC_PARAMS = Pattern.compile("^.+?<([\\s\\w\\<>,\\?]+)>$");
-
PACKAGE_NAME
public static final java.util.regex.Pattern PACKAGE_NAME
This shall match a Java PackageString
- Code:
- Exact Field Declaration Expression:
1
public static final Pattern PACKAGE_NAME = Pattern.compile("([A-Za-z_]\\w*\\.)+");
-
REG_EX_ESCAPE_CHARS
public static final java.lang.String REG_EX_ESCAPE_CHARS
This is the list of characters that need to be escaped for a regular expression- See Also:
- Constant Field Values
- Code:
- Exact Field Declaration Expression:
1
public static final String REG_EX_ESCAPE_CHARS = "\\/()[]{}$^+*?-.";
-
ALPHA_NUMERIC
public static final java.util.regex.Pattern ALPHA_NUMERIC
Alpha-Numeric RegEx- Code:
- Exact Field Declaration Expression:
1
public static final Pattern ALPHA_NUMERIC = Pattern.compile("^[\\d\\w]*$");
-
alphaNumPred
public static final java.util.function.Predicate<java.lang.String> alphaNumPred
Alpha-NumericString
Predicate.- See Also:
ALPHA_NUMERIC
- Code:
- Exact Field Declaration Expression:
1
public static final Predicate<String> alphaNumPred = ALPHA_NUMERIC.asPredicate();
-
JS_ESCAPE_CHARS
protected static final char[] JS_ESCAPE_CHARS
When converting aString
for a Java-ScriptString
, these are the characters that must be escaped.- Code:
- Exact Field Declaration Expression:
1
protected static final char[] JS_ESCAPE_CHARS = { '\\', '/', '\n', '\"' };
-
REGEX_ESCAPE_CHARS
protected static final char[] REGEX_ESCAPE_CHARS
These are 'control' characters (Reg Ex Code), so they must be escaped if the are to be treated as their ASCII-equivalent values.- Code:
- Exact Field Declaration Expression:
1 2
protected static final char[] REGEX_ESCAPE_CHARS = { '\\', '/', '(', ')', '[', ']', '{', '}', '$', '^', '+', '*', '?', '-', '.' };
-
-
Method Detail
-
commas
public static java.lang.String commas(long l)
Makes along
number like123456789
into a number-string such as:"123,456,789"
. Java'spackage java.text.*
is easy to use, and versatile, but the commands are not always so easy to remember.- Parameters:
l
- Anylong
integer. Comma's will be inserted for every third power of ten- Returns:
- After calling java's
java.text.DecimalFormat
class, aString
representing this parameter will be returned. - Code:
- Exact Method Body:
1
return formatter.format(l);
-
trimRight
public static java.lang.String trimRight(java.lang.String s)
Trims any white-spaceCharacters
from the end of aString
.Input String: Output String: "A Quick Brown Fox\n \t"
"A Quick Brown Fox"
"\tA Lazy Dog."
"\tA Lazy Dog."
" " (only white-space)
""
"" (empty-string)
""
null
throws NullPointerException
- Parameters:
s
- Any JavaString
- Returns:
- A copy of the same
String
- but all characters that matched Java methodjava.lang.Character.isWhitespace(char)
and were at the end of theString
will not be included in the returnedString
.
If thezero-length String
is passed to parameter's'
, it shall be returned immediately.
If the resultant-String
has zero-length, it is returned, without exception. - Code:
- Exact Method Body:
1 2 3 4 5 6 7 8 9
if (s.length() == 0) return s; int pos = s.length(); while ((pos > 0) && Character.isWhitespace(s.charAt(--pos))); if (pos == 0) if (Character.isWhitespace(s.charAt(0))) return ""; return s.substring(0, pos + 1);
-
trimLeft
public static java.lang.String trimLeft(java.lang.String s)
Trims any white-spaceCharacters
from the beginning of aString
.Input String: Output String: "\t A Quick Brown Fox"
"A Quick Brown Fox"
"A Lazy Dog. \n\r\t"
"A Lazy Dog. \n\r\t"
" " (only white-space)
""
"" (empty-string)
""
null
throws NullPointerException
- Parameters:
s
- Any JavaString
- Returns:
- A copy of the same
String
- but all characters that matched Java methodjava.lang.Character.isWhitespace(char)
and were at the start of theString
will not be included in the returnedString
.
If thezero-length String
is passed to parameter's'
, it shall be returned immediately.
If the resultant-String
has zero-length, it is returned, without exception. - Code:
- Exact Method Body:
1 2 3 4 5 6 7 8 9 10
int pos = 0; int len = s.length(); if (len == 0) return s; while ((pos < len) && Character.isWhitespace(s.charAt(pos++))); if (pos == len) if (Character.isWhitespace(s.charAt(len-1))) return ""; return s.substring(pos - 1);
-
leftSpacePad
public static java.lang.String leftSpacePad(java.lang.String s, int totalStringLength)
Primarily for convenience in remembering earlier C-styleprintf(...)
formatting commands.
This method will "left pad" an inputString
with spaces, ifs.length() < totalStrLength
. If input-parameter's'
is equal-to or longer-than the value in'totalStringLength'
, then the originalString
shall be returned.Input Parameters Returned String "Quick Brown Fox"
20
" Quick Brown Fox"
"Hello World"
15
" Hello World"
"Write Once, Run Anywhere"
10
"Write Once, Run Anywhere"
null
NullPointerException
- Parameters:
s
- This may be anyjava.lang.String
totalStringLength
- Ifs.length()
is smaller than'totalStringLength'
, then as many space characters (' '
) as are needed to ensure that the returned'String'
has length equal to'totalStringLength'
will be prepended to the inputString
parameter's'
.
Ifs.length()
is greater than'totalStringLength'
, then the original input shall be returned.- Throws:
java.lang.IllegalArgumentException
- IftotalStringLength
is zero or negative.- See Also:
rightSpacePad(String, int)
- Code:
- Exact Method Body:
1 2 3 4 5 6 7 8
if (totalStringLength <= 0) throw new IllegalArgumentException( "totalString length was '" + totalStringLength + ", " + "however it is expected to be a positive integer." ); return (s.length() >= totalStringLength) ? s : String.format("%1$" + totalStringLength + "s", s);
-
rightSpacePad
public static java.lang.String rightSpacePad(java.lang.String s, int totalStringLength)
Primarily for convenience in remembering earlier C-styleprintf(...)
formatting commands.
This method will "right pad" an inputString
with spaces, ifs.length() < totalStrLength
. If input-parameter's'
is equal-to or longer-than the value in'totalStringLength'
, then the originalString
shall be returned.Input Parameters Returned String "Quick Brown Fox"
20
"Quick Brown Fox "
"Hello World"
15
"Hello World "
"Write Once, Run Anywhere"
10
"Write Once, Run Anywhere"
null
NullPointerException
- Parameters:
s
- This may be anyjava.lang.String
totalStringLength
- Ifs.length()
is smaller than'totalStringLength'
, then as many space characters (' '
) as are needed to ensure that the returned'String'
has length equal to'totalStringLength'
will be postpended to the inputString
parameter's'
.
Ifs.length()
is greater than'totalStringLength'
, then the original input shall be returned.- Throws:
java.lang.IllegalArgumentException
- IftotalStringLength
is zero or negative.- See Also:
leftSpacePad(String, int)
- Code:
- Exact Method Body:
1 2 3 4 5 6 7 8
if (totalStringLength <= 0) throw new IllegalArgumentException( "totalString length was '" + totalStringLength + "', " + "however it is expected to be a positive integer." ); return (s.length() >= totalStringLength) ? s : String.format("%1$-" + totalStringLength + "s", s);
-
setChar
public static java.lang.String setChar(java.lang.String str, int i, char c)
This sets a character in aString
to a new value, and returns a result.- Parameters:
str
- Any javaString
i
- An index into the underlying character array of thatString
.c
- A new character to be placed at the i'th position of thisString
.- Returns:
- a new java
String
, with the appropriate index into theString
substituted using character parameter'c'
. - Code:
- Exact Method Body:
1 2
if ((i + 1) < str.length()) return str.substring(0, i) + c + str.substring(i + 1); else return str.substring(0, i) + c;
-
delChar
public static java.lang.String delChar(java.lang.String str, int i)
This removes a character from aString
, and returns a newString
as a result.- Parameters:
str
- Any Java-String
.i
- This is the index into the underlying javachar
-array whose character will be removed from the returnString
.- Returns:
- Since Java
String
's are all immutable, thisString
that is returned is completely new, with the character that was originally at index 'i' removed. - Code:
- Exact Method Body:
1 2 3 4
if ((i + 1) < str.length()) return str.substring(0, i) + str.substring(i + 1); else return str.substring(0, i);
-
removeDuplicateSpaces
public static java.lang.String removeDuplicateSpaces(java.lang.String s)
Returns the sameString
is input, but trims all spaces down to a single space. Each and every lone / independent or contiguous white-space character is reduced to a single space-character.Input String Output String "This has extra spaces\n"
"This has extra spaces "
"This does not"
"This does not"
"\tThis\nhas\ttabs\nand\tnewlines\n"
" This has tabs and newlines "
- Parameters:
s
- Any JavaString
- Returns:
- A
String
where all white-space is compacted to a single space. This is generally how HTML works, when it is displayed in a browser. - Code:
- Exact Method Body:
1
return StringParse.WHITE_SPACE_REGEX.matcher(s).replaceAll(" ");
-
removeWhiteSpace
public static java.lang.String removeWhiteSpace(java.lang.String s)
This string-modify method simply removes any and all white-space matches found within a java-String
.Input String Output String "This Has Extra Spaces\n"
"ThisHasExtraSpaces"
"This Does Not"
"ThisDoesNot"
"\tThis\nHas\tTabs\nAnd\tNewlines\n"
"ThisHasTabsAndNewlines"
- Parameters:
s
- AnyString
, but if it has any white-space (space that matches regular-expression:\w+
) then those character-blocks will be removed- Returns:
- A new
String
without any\w
(RegEx for 'whitespace') - See Also:
WHITE_SPACE_REGEX
- Code:
- Exact Method Body:
1
return WHITE_SPACE_REGEX.matcher(s).replaceAll("");
-
lineOrLines
public static java.lang.String lineOrLines(java.lang.String s, int pos, int len, java.lang.String unixColorCode)
This will return the complete text-lines of character data for the line identified by token-substring position parameterspos
andlen
. This method will search, in the left-direction (decreasingString
index) for the first new-line character identified. It will also search, starting at positionpos + len
, for the first new-line character in the right-direction (increasingString
index).
If the token-substring identified bys.substring(pos, len)
itself contains any new-line characters, these will neither affect the prepended, nor the post-pended searchString
. To be precise, any newline characters between'pos'
and'len'
will be irrelevant to the left-wards and right-wards newlines searches for new-line characters.- Parameters:
s
- This may be any valid JavaString
. It ought to be some variant of a text-file. It will be searched for the nearest'\n'
character - in both directions, left and right - from parameterint 'pos'
and parameterint 'len'
pos
- This is a position in the input-parameterString 's'
. The nearest'\n'
(new-line) character, to the left of this position, will be found and identified. If thechar
ats.charAt(pos)
is, itself, a'\n'
(newline) character, then no left-direction search will be performed. The left-most position of the returned substring would then bepos + 1
.len
- The search for the 'right-most''\n'
(newline-character) will begin at position'len'
. If the character ats.charAt(pos + len)
is, itself, a new-line character, then no right-direction search will be performed. The right-most position of the returned substring would bepos + len - 1
.unixColorCode
- If thisString
is null, it will be ignored. If thisString
is non-null, it will be inserted before the "MatchingString
" indicated by the index-boundariespos
TOpos + len
.
NOTE: No Validity Check shall be performed on thisString
, and the user is not obligated to provide aShell.C
valid UNIX Color-CodeString
. Also, a closingC.RESET
is inserted after the terminus of the match.- Returns:
- The
String
demarcated by the first new-line character PLUS 1 BEFORE index'pos'
, and the first new-line character MINUS 1 AFTER indexpos + len
.
NOTE: The above does mean, indeed, that the starting and ending new-lines WILL NOT be included in the returnedString
.
ALSO: Also, if there are no new-line characters before position'pos'
, then every character beginning at position zero will be included in the returnedString
result. Also, if there are no new-line characters after positionpos + len
then every character after positionpos + len
will be appended to the returnedString
result. - Throws:
java.lang.StringIndexOutOfBoundsException
- If either'pos'
, or'pos + len'
are not within the bounds of the inputString 's'
java.lang.IllegalArgumentException
- If the value passed to parameter'len'
is zero or negative.- Code:
- Exact Method Body:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
if ((pos >= s.length()) || (pos < 0)) throw new StringIndexOutOfBoundsException( "The integer passed to parameter 'pos' [" + pos + "], is past the bounds of the end " + "of String 's', which has length [" + s.length() + "]" ); if (len <= 0) throw new IllegalArgumentException ("The value passed to parameter 'len' [" + len + "], may not be negative."); if ((pos + len) > s.length()) throw new StringIndexOutOfBoundsException( "The total of parameter 'pos' [" + pos + "], and parameter 'len' [" + len + "], is: " + "[" + (pos + len) + "]. Unfortunately, String parameter 's' only has length " + "[" + s.length() + "]" ); int linesStart, linesEnd, temp; if (pos == 0) linesStart = 0; else if (s.charAt(pos) == '\n') linesStart = pos + 1; else if ((temp = StrIndexOf.left(s, pos, '\n')) != -1) linesStart = temp + 1; else linesStart = 0; if ((pos + len) == s.length()) linesEnd = s.length(); else if (s.charAt(pos + len) == '\n') linesEnd = pos + len; else if ((temp = s.indexOf('\n', pos + len)) != -1) linesEnd = temp; else linesEnd = s.length(); /* // VERY USEFUL FOR DEBUGGING. DO NOT DELETE... // NOTE: This method is the one that GREP uses. System.out.println("s.charAt(pos)\t\t= " + "[" + s.charAt(pos) + "]"); System.out.println("s.charAt(pos+len)\t= " + "[" + s.charAt(pos+len) + "]"); System.out.println("s.length()\t\t= " + s.length()); System.out.println("pos\t\t\t= " + pos); System.out.println("pos + len\t\t= " + (pos + len)); System.out.println("linesStart\t\t= " + linesStart); System.out.println("linesEnd\t\t= " + linesEnd); */ return (unixColorCode != null) ? s.substring(linesStart, pos) + unixColorCode + s.substring(pos, pos + len) + C.RESET + s.substring(pos + len, linesEnd) : s.substring(linesStart, pos) + s.substring(pos, pos + len) + s.substring(pos + len, linesEnd);
-
line
public static java.lang.String line(java.lang.String s, int pos)
This will return the complete text-line of character data from 'inside' the input-parameterString s
. The meaning of'complete text-line'
, in this method, is that any and all character data between the first'\n'
(new-line character) when scanning towards the right (increasingString
-index) and the first'\n'
character when scanning towards the left (decreasing index) constitutes'a line'
(of text-data).
This scan shall for the left-most and right-most new-line shall begin atString
-index parameterpos
. If either the left-direction or right-direction scan does not find any new-line characters, then start and end indices of the returned line of text shall be demarcated by input-String
index'0'
and indexString.length()
, respectively- Parameters:
s
- This may be any valid JavaString
. It ought to be some variant of a text-file. It will be searched for the nearest'\n'
character - in both directions, left and right - from parameterint 'pos'
.pos
- This is a position in the input-parameterString 's'
. The nearest new-line character both to the left of this position, and to the right, will be found and identified. If the character ats.charAt(pos)
is itself a newline'\n'
character, then an exception shall throw.- Returns:
- The
String
identified by the first new-line character PLUS 1 BEFORE index'pos'
, and the first new-line character MINUS 1 AFTER index'pos + len'
.
NOTE: The above means, that the starting and ending new-lines, themselves, will not be included in theString
that is returned.
ALSO: Also, if there are no new-line characters before position'pos'
, then every character beginning at position zero will be included in the returnedString
result. Also, if there are no new-line characters after position'pos + len'
then every character after position'pos + len'
will be appended to the returnedString
result. - Throws:
java.lang.StringIndexOutOfBoundsException
- If is not within the bounds of the inputString 's'
java.lang.IllegalArgumentException
- If the character inString 's'
at position'pos'
is a newline'\n'
, itself.- Code:
- Exact Method Body:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
if ((pos > s.length()) || (pos < 0)) throw new StringIndexOutOfBoundsException( "The integer passed to parameter 'pos' [" + pos + "], is past the bounds of the end of " + "String 's', which has length [" + s.length() + "]" ); if (s.charAt(pos) == '\n') throw new IllegalArgumentException( "The position-index for string-parameter 's' contains, itself, a new line character " + "'\\n.' This is not allowed here." ); int lineStart = StrIndexOf.left(s, pos, '\n'); int lineEnd = s.indexOf('\n', pos); if (lineStart == -1) lineStart = 0; if (lineEnd == -1) lineEnd = s.length(); return s.substring(lineStart + 1, lineEnd);
-
hasWhiteSpace
public static boolean hasWhiteSpace(java.lang.String s)
This method checks whether or not a java-String
has white-space.- Parameters:
s
- Any Java-String
. If thisString
has any white-space, this method will return TRUE- Returns:
- TRUE If there is any white-space in this method, and FALSE otherwise.
- See Also:
WHITE_SPACE_REGEX
- Code:
- Exact Method Body:
1
return WHITE_SPACE_REGEX.matcher(s).find();
-
countCharacters
public static int countCharacters(java.lang.String s, char c)
Counts the number of instances of character inputchar c
contained by the inputString s
- Parameters:
s
- AnyString
containing any combination of ASCII/UniCode charactersc
- Any ASCII/UniCode character.- Returns:
- The number of times
char c
occurs inString s
- Code:
- Exact Method Body:
1 2 3 4
int count = 0; int pos = 0; while ((pos = s.indexOf(c, pos + 1)) != -1) count++; return count;
-
ifQuotesStripQuotes
public static java.lang.String ifQuotesStripQuotes(java.lang.String s)
If theString
passed to this method contains a single-quote on both sides of theString
, or if it contains a double-quote on both sides of thisString
, then this method shall return a newString
that is shorter in length by 2, and leaves off the first and last characters of the input parameterString
.
HOPEFULLY, The name of this method explains clearly what this method does- Parameters:
s
- This may be any javaString
. OnlyString's
whose first and last characters are not only quotation marks (single or double), but also they are the same, identical, quotation marks on each side.- Returns:
- A new
String
that whose first and last quotation marks are gone - if they were there when this method began. - Code:
- Exact Method Body:
1 2 3 4 5 6 7 8 9 10 11
if (s == null) return null; if (s.length() < 2) return s; int lenM1 = s.length() - 1; // Position of the last character in the String if ( ((s.charAt(0) == '\"') && (s.charAt(lenM1) == '\"')) // String has Double-Quotation-Marks || // ** or *** ((s.charAt(0) == '\'') && (s.charAt(lenM1) == '\'')) ) // String has Single-Quotation-Marks return s.substring(1, lenM1); else return s;
-
monthStr
public static java.lang.String monthStr(int month)
Converts an integer into a Month. I could just use theclass java.util.Calendar
, but it is so complicated, that using an internal array is easier.String months[] = { month names };
- Parameters:
month
- The month, as a number from'1'
to'12'
.- Returns:
- A month as a
String
like:"January"
or"August"
- Code:
- Exact Method Body:
1
return months[month-1];
-
dateStr
public static java.lang.String dateStr()
Generates a "Date String" using the character separator'.'
- Returns:
- A
String
in the form:YYYY.MM.DD
- Code:
- Exact Method Body:
1
return dateStr('.', false);
-
dateStr
public static java.lang.String dateStr(char separator)
Generates a "Date String" using the separator parameter as the separator between numbers- Parameters:
separator
- Any ASCII or UniCode character.- Returns:
- A
String
of the form:YYYYcMMcDD
where'c'
is the passed'separator'
parameter. - Code:
- Exact Method Body:
1
return dateStr(separator, false);
-
dateStrGOVCN
public static java.lang.String dateStrGOVCN()
Generates a "Date String" that is consistent with the directory-name file-storage locations used to store articles fromhttp://Gov.CN
.- Returns:
- The
String's
used for the Chinese Government Web-Portal Translation Pages - Code:
- Exact Method Body:
1
return dateStr('/', false).replaceFirst("/", "-");
-
dateStr
public static java.lang.String dateStr(char separator, boolean includeMonthName)
This class is primary included because although Java has a pretty reasonable "general purpose" calendar class/interface, but a consistent / sameString
since is needed because the primary use here is for building the names of files.- Parameters:
separator
- Any ASCII or Uni-Code character.includeMonthName
- When TRUE, the English-Name of the month ('January'
...'December'
) will be appended to the month number in the returnedString
.- Returns:
- The year, month, and day as a
String
. - Code:
- Exact Method Body:
1 2 3 4 5 6 7 8
Calendar c = internalCalendar; String m = zeroPad10e2(c.get(Calendar.MONTH) + 1); // January is month zero! String d = zeroPad10e2(c.get(Calendar.DAY_OF_MONTH)); if (includeMonthName) m += " - " + c.getDisplayName(Calendar.MONTH, 2, Locale.US); if (separator != 0) return c.get(Calendar.YEAR) + "" + separator + m + separator + d; else return c.get(Calendar.YEAR) + "" + m + d;
-
ymDateStr
public static java.lang.String ymDateStr()
Returns aString
that has the year and the month (but not the day, or other time components).- Returns:
- Returns the current year and month as a
String
. - Code:
- Exact Method Body:
1
return ymDateStr('.', false);
-
ymDateStr
public static java.lang.String ymDateStr(char separator)
Returns aString
that has the year and the month (but not the day, or other time components).- Parameters:
separator
- The single-character separator used between year, month and day.- Returns:
- The current year and month as a
String
. - Code:
- Exact Method Body:
1
return ymDateStr(separator, false);
-
ymDateStr
public static java.lang.String ymDateStr(char separator, boolean includeMonthName)
Returns aString
that has the year and the month (but not the day, or other time components).- Parameters:
separator
- The single-character separator used between year, month and day.includeMonthName
- When this is true, the name of the month, in English, is included with the returnString
.- Returns:
- YYYYseparatorMM(? include-month-name)
- Code:
- Exact Method Body:
1 2 3 4 5 6 7
Calendar c = internalCalendar; String m = zeroPad10e2(c.get(Calendar.MONTH) + 1); // January is month zero! if (includeMonthName) m += " - " + c.getDisplayName(Calendar.MONTH, 2, Locale.US); if (separator != 0) return c.get(Calendar.YEAR) + "" + separator + m; else return c.get(Calendar.YEAR) + "" + m;
-
timeStr
public static java.lang.String timeStr()
Returns the current time as aString
.- Returns:
- military time - with AM|PM (redundant) added too.
Includes only Hour and Minute - separated by a colon character
':'
- See Also:
timeStr(char)
- Code:
- Exact Method Body:
1
return timeStr(':');
-
timeStr
public static java.lang.String timeStr(char separator)
Returns the current time as aString
.- Parameters:
separator
- The character used to separate the minute & hour fields- Returns:
- military time - with AM|PM added redundantly, and a separator of your choosing.
- Code:
- Exact Method Body:
1 2 3 4 5 6 7 8
Calendar c = internalCalendar; int ht = c.get(Calendar.HOUR) + ((c.get(Calendar.AM_PM) == Calendar.AM) ? 0 : 12); String h = zeroPad10e2((ht == 0) ? 12 : ht); // 12:00 is represented as "0"... changes this... String m = zeroPad10e2(c.get(Calendar.MINUTE)); String p = (c.get(Calendar.AM_PM) == Calendar.AM) ? "AM" : "PM"; if (separator != 0) return h + separator + m + separator + p; else return h + m + p;
-
timeStrComplete
public static java.lang.String timeStrComplete()
Returns the current time as aString
. This method uses all time components available.- Returns:
- military time - with AM|PM added redundantly.
- Code:
- Exact Method Body:
1 2 3 4 5 6 7 8 9
Calendar c = internalCalendar; int ht = c.get(Calendar.HOUR) + ((c.get(Calendar.AM_PM) == Calendar.AM) ? 0 : 12); String h = zeroPad10e2((ht == 0) ? 12 : ht); // 12:00 is represented as "0"... changes this... String m = zeroPad10e2(c.get(Calendar.MINUTE)); String s = zeroPad10e2(c.get(Calendar.SECOND)); String ms = zeroPad(c.get(Calendar.MILLISECOND)); String p = (c.get(Calendar.AM_PM) == Calendar.AM) ? "AM" : "PM"; return h + '-' + m + '-' + p + '-' + s + '-' + ms + "ms";
-
ordinalIndicator
public static java.lang.String ordinalIndicator(int i)
The words "ordinal indicator" are referring to the little characterString
that is often used in English to make a number seem more a part of an english sentence.- Parameters:
i
- Any positive integer (greater than 0)- Returns:
- This will return the following strings:
Input: RETURNS: i = 1 "st" (as in "1st","first") i = 2 "nd" (as in "2nd", "second") i = 4 "th" (as in "4th") i = 23 "rd" (as in "23rd") - Throws:
java.lang.IllegalArgumentException
- If i is negative, or zero- Code:
- Exact Method Body:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
if (i < 1) throw new IllegalArgumentException("i: " + i + "\tshould be a natural number > 0."); // Returns the last 2 digits of the number, or the number itself if it is less than 100. // Any number greater than 100 - will not have the "text-ending" (1st, 2nd, 3rd...) affected - // by the digits after the first two digits. Just analyze the two least-significant digits. i = i % 100; // All numbers between "4th" and "19th" end with "th" if ((i > 3) && (i < 20)) return "th"; // set i to be the least-significant digit of the number - if that number was 1, 2, or 3 i = i % 10; // Obvious: English Rules. if (i == 1) return "st"; if (i == 2) return "nd"; if (i == 3) return "rd"; // Compiler is complaining. This statement should never be executed. return "th";
-
zeroPad
public static java.lang.String zeroPad(int n)
This just zero-pads integers with "prepended" zero's. java.text has all kinds of extremely intricate zero-padding and text-formatting classes. However, here, these are generally used for debug, line-number, or count information that is printed to the UNIX terminal. When this is the case, a simple and easily remembered 'one line method' is a lot more useful than all of the highly-scalable versions of the text-formatting classes in java.text.- Parameters:
n
- Any Integer. If'n'
is negative or greater than 1,000 - then null is returned.- Returns:
- A zero-padded
String
- to precisely three orders of 10, as in the example table below:Input RETURNS: n = 9 "009" n = 99 "099" n = 999 "999" n = 9999 null n = -10 null - See Also:
zeroPad10e2(int)
,zeroPad10e4(int)
- Code:
- Exact Method Body:
1 2 3 4 5
if (n < 0) return null; if (n < 10) return "00" + n; if (n < 100) return "0" + n; if (n < 1000) return "" + n; return null;
-
zeroPad10e2
public static java.lang.String zeroPad10e2(int n)
Pads an integer such that it contains enough leading zero's to ensure a String-length of two.- Parameters:
n
- Must be an integer between 0 and 99, or else null will be returned- Returns:
- A zero-padded String of the integer, to precisely two orders of
10
. Null is returned if the number cannot fit within two spaces. Example table follows:Input RETURNS: n = 9 "09" n = 99 "99" n = 999 null n = -10 null - See Also:
zeroPad(int)
- Code:
- Exact Method Body:
1 2 3 4
if (n < 0) return null; if (n < 10) return "0" + n; if (n < 100) return "" + n; return null;
-
zeroPad10e4
public static java.lang.String zeroPad10e4(int n)
Pads an integer such that it contains enough leading zero's to ensure a String-length of four.- Parameters:
n
- Must be an integer between 0 and 9999, or else null will be returned- Returns:
- A zero-padded String of the integer, to precisely four orders of 10.
Null is returned if the number cannot fit within four spaces. Example table follows:
Input RETURNS: n = 9 "0009" n = 99 "0099" n = 999 "0999" n = 9999 "9999" n = 99999 null n = -10 null - See Also:
zeroPad(int)
- Code:
- Exact Method Body:
1 2 3 4 5 6
if (n < 0) return null; if (n < 10) return "000" + n; if (n < 100) return "00" + n; if (n < 1000) return "0" + n; if (n < 10000) return "" + n; return null;
-
zeroPad
public static java.lang.String zeroPad(int n, int powerOf10)
Pad's an integer with leading zeroes into aString
. The number of zeroes padded is equal to parameter'powerOf10'
. Ifint 'powerOf10'
were equal to zero, then any integer passed to this function would return aString
that was precisely three characters long. If the value of parameterint 'n'
were larger than1,000
or negative, then null would be returned.- Parameters:
n
- Must be an integer between'0'
and'9999'
where the number of'9'
digits is equal to the value of parameterint 'powerOf10'
powerOf10
- This must be a positive integer greater than'1'
. It may not be larger'11'
. The largest value that any integer in Java may attain is'2,147,483, 647'
- Returns:
- A zero padded
String
. If a negative number is passed to parameter'n'
, then 'null' shall be returned. Null shall also be returned if the "Power of 10 Exponent of parametern
" is greater than the integer-value of parameter'powerOf10'
FOR INSTANCE: a call to:zeroPad(54321, 4);
would return null since the value of parameter'n'
has five-decimal-places, but'powerOf10'
is only 4! - Throws:
java.lang.IllegalArgumentException
- if the value parameter'powerOf10'
is less than 2, or greater than11
.- Code:
- Exact Method Body:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
if (n < 0) return null; // Negative Values of 'n' not allowed char[] cArr = new char[powerOf10]; // The String's length will be equal to 'powerOf10' String s = "" + n; // (or else 'null' would be returned) int i = powerOf10 - 1; // Internal Loop variable int j = s.length() - 1; // Internal Loop variable Arrays.fill(cArr, '0'); // Initially, fill the output char-array with all zeros while ((i >= 0) && (j >= 0)) // Now start filling that char array with the actual number cArr[i--] = s.charAt(j--); if (j >= 0) return null; // if all of parameter 'n' was inserted into the output // (number 'n' didn't fit) then powerOf10 was insufficient, // so return null. return new String(cArr);
-
grep_HREF_tag
public static java.lang.String grep_HREF_tag(java.lang.String s)
If parameterString s
contains any tag within-which there is a valid"HREF"
, this will return the contents of theHREF
Attribute/InnerTag.- Parameters:
s
- This is usually some variant of an HTML element/tagString
. This method was the first one written for HTML in this scrape package, and is just kept here for legacy reasons. Theclass HTML.TagNode
has a number of options for extracting the'HREF'
attribute from an HTML element.- Returns:
- The attribute-value of an
HREF=...
attribute inside (usually an<A>
'Anchor') HTML tag. This will return 'null' if there is noHREF="..."
attribute-value pair is found or identified. - Throws:
java.lang.IllegalArgumentException
- If there is no end-quote found for theHREF="..."
sub-string.- Code:
- Exact Method Body:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
s = s.toLowerCase(); String quote = "\""; int hrefPos = s.indexOf("href=\""); if (hrefPos == -1) { hrefPos = s.indexOf("href='"); if (hrefPos == -1) return null; quote = "'"; } // System.out.print("\t[hrefPos=" + hrefPos + "]"); // the " + 6" is because the string HREF=" is 6 characters long String ret = s.substring(hrefPos + 6); int endQuotePos = ret.indexOf(quote); if (endQuotePos == -1) throw new IllegalArgumentException("HREF has no EndQuote!\n\nFor String:\n" + s); // System.out.print("endQuotePos = " + endQuotePos + " " + ret.substring(0, endQuotePos)); return ret.substring(0,endQuotePos);
-
grep_IMG_SRC_tag
public static java.lang.String grep_IMG_SRC_tag(java.lang.String s)
If parameterString s
contains an HTML"IMG"
tag, this will return the contents of the"SRC=..."
attribute tag-field.- Parameters:
s
- This is usually some variant of an HTML element/tagString
. This method was the first one written for HTML in this scrape package, and is just kept here for legacy reasons. Theclass HTML.TagNode
has a number of options for extracting the'SRC'
attribute from an HTML element.- Returns:
- The attribute-value of a
SRC=...
attribute inside (usually an<IMG>
'Image') HTML tag. 'null' is returned if:- There is no HTML
'IMG'
token found in theString
- There is no
SRC='...'
attribute-value pair found.
- There is no HTML
- Code:
- Exact Method Body:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
String stlc = s.toLowerCase(); // System.out.println("1: " + stlc); int imgPos = stlc.indexOf("<img "); if (imgPos == -1) return null; stlc = stlc.substring(imgPos + 5); // System.out.println("2: " + stlc + "[imgPos=" + imgPos + "]"); // first check for double-quotes String quote = "\""; int srcPos = stlc.indexOf("src=\""); if (srcPos == -1) { // if no double-quotes, try single quotes srcPos = stlc.indexOf("src='"); if (srcPos == -1) return null; quote = "'"; } stlc = stlc.substring(srcPos + 5); // System.out.println("3: " + stlc + "[srcPos=" + srcPos + "]"); int endSrcPos = stlc.indexOf(quote); if (endSrcPos == -1) return null; int urlStart = imgPos + srcPos + 10; int urlEnd = urlStart + endSrcPos; // System.out.println("4: [endSrcPos=" + endSrcPos + ", urlStart=" + urlStart + ", urlEnd=" + urlEnd); return s.substring(urlStart, urlEnd);
-
findLastFrontSlashPos
public static int findLastFrontSlashPos(java.lang.String urlOrDir)
This function finds the position of the last "front-slash" character'/'
in a java-String
- Parameters:
urlOrDir
- This is any java-String
, but preferably one that is aURL
, or directory.- Returns:
- The
String
-index of the last 'front-slash''/'
position in aString
, or-1
if there are not front-slashes. - Code:
- Exact Method Body:
1
return urlOrDir.lastIndexOf('/');
-
fromLastFrontSlashPos
public static java.lang.String fromLastFrontSlashPos (java.lang.String urlOrDir)
This returns the contents of aString
, after the last front-slash found.
NOTE: If not front-slash'/'
character is found, then the originalString
is returned.- Parameters:
urlOrDir
- This is any java-String
, but preferably one that is aURL
, or directory.- Returns:
- the portion of the
String
after the final front-slash'/'
character. If there are no front-slash characters found in thisString
, then the originalString
shall be returned. - Code:
- Exact Method Body:
1 2 3
int pos = urlOrDir.lastIndexOf('/'); if (pos == -1) return urlOrDir; return urlOrDir.substring(pos + 1);
-
beforeLastFrontSlashPos
public static java.lang.String beforeLastFrontSlashPos (java.lang.String urlOrDir)
This returns the contents of aString
, before the last front-slash found (including the front-slash'/'
itself).
NOTE: If no front-slash'/'
character is found, then null is returned.- Parameters:
urlOrDir
- This is any java-String
, but preferably one that is aURL
, or directory.- Returns:
- the portion of the
String
before and including the final front-slash'/'
character. If there are no front-slash characters found in thisString
, then null. - Code:
- Exact Method Body:
1 2 3
int pos = urlOrDir.lastIndexOf('/'); if (pos == -1) return null; return urlOrDir.substring(0, pos + 1);
-
findLastFileSeparatorPos
public static int findLastFileSeparatorPos(java.lang.String fileOrDir)
This function finds the position of the last'java.io.File.separator'
character in a java-String
. In UNIX-based systems, this is a forward-slash'/'
character, but in Windows-MSDOS, this is a back-slash'\'
character. Identifying which of the two is used is obtained by "using" Java'sFile.separator
class and field.- Parameters:
fileOrDir
- This may be any Java-String
, but preferably one that represents a file or directory.- Returns:
- The
String
-index of the last 'file-separator' position in aString
, or-1
if there are no such file-separators. - Code:
- Exact Method Body:
1
return fileOrDir.lastIndexOf(File.separator.charAt(0));
-
fromLastFileSeparatorPos
public static java.lang.String fromLastFileSeparatorPos (java.lang.String fileOrDir)
This returns the contents of aString
, after the last'java.io.File.separator'
found.
NOTE: If no'java.io.File.separator'
character is found, then the originalString
is returned.- Parameters:
fileOrDir
- This is any java-String
, but preferably one that is a filename or directory-name- Returns:
- the portion of the
String
after the final'java.io.File.separator'
character. If there are no such characters found, then the originalString
shall be returned. - Code:
- Exact Method Body:
1 2 3
int pos = fileOrDir.lastIndexOf(File.separator.charAt(0)); if (pos == -1) return fileOrDir; return fileOrDir.substring(pos + 1);
-
beforeLastFileSeparatorPos
public static java.lang.String beforeLastFileSeparatorPos (java.lang.String urlOrDir)
This returns the contents of aString
, before the last'java.io.File.separator'
(including the separator itself).
NOTE: If no'java.io.File.separator'
character is found, then null is returned.- Parameters:
urlOrDir
- This is any java-String
, but preferably one that is aURL
, or directory.- Returns:
- the portion of the
String
before and including the final'java.io.File.separator'
character. If there are no such characters found in thisString
, then null is returned. - Code:
- Exact Method Body:
1 2 3
int pos = urlOrDir.lastIndexOf(File.separator.charAt(0)); if (pos == -1) return null; return urlOrDir.substring(0, pos + 1);
-
findExtension
public static int findExtension(java.lang.String file, boolean includeDot)
This will return the location within aString
where the last period ('.'
) is found.
ALSO: No validity checks for valid file-system names are performed. Rather, the portion of the input-String
starting at the location of the last period is returned, regardless of what theString
contains.- Parameters:
file
- This may be any Java-String
, but preferably one that represents a file.includeDot
- When this parameter is passed TRUE, the position-index that is returned will be the location of the last index where a period ('.'
) is found. When FALSE, the index returned will be the location of that period+ 1
.- Returns:
- This will return the location of the file-extension. If no period is found, then
-1
is returned. If the period is the lastchar
in theString
, and parameter'includeDot'
is FALSE, then-1
is returned. - Code:
- Exact Method Body:
1 2 3 4 5
int pos = file.lastIndexOf('.'); if (pos == -1) return -1; if (includeDot) return pos; pos++; return (pos < file.length()) ? pos : -1;
-
fromExtension
public static java.lang.String fromExtension(java.lang.String file, boolean includeDot)
This returns the contents of aString
, after the last period'.'
in thatString
. For file-system and web files, this is often referred to as the file extension.
NOTE: If no period'.'
character is found, then null is returned.
ALSO: No validity checks for valid file-system names are performed. Rather, the portion of the input-String
starting at the location of the last period is returned, regardless of what theString
contains.- Parameters:
file
- This is any java-String
, but preferably one that is a filename.includeDot
- This determines whether the period'.'
is to be included in the returned-String
.- Returns:
- the portion of the
String
after the final period'.'
character. If parameterincludeDot
has been passed FALSE, then the portion of the input-String
beginning after the last period is returned.
If there are no period characters found in thisString
, then null is returned. - Code:
- Exact Method Body:
1 2 3
int pos = findExtension(file, includeDot); if (pos == -1) return null; return file.substring(pos);
-
beforeExtension
public static java.lang.String beforeExtension(java.lang.String file)
This returns the contents of aString
, before the last period'.'
in thatString
. For file-system and web files, this is often referred to as the file extension.
NOTE: If no period'.'
character is found, then the originalString
is returned.
ALSO: No validity checks for valid file-system names are performed. Rather, the portion of the input-String
starting at the location of the last period is returned, regardless of what theString
contains.- Parameters:
file
- This is any java-String
, but preferably one that is a filename.- Returns:
- the portion of the
String
before the final period'.'
character.
If there are no period characters found in thisString
, then the original file is returned. - Code:
- Exact Method Body:
1 2 3
int pos = file.lastIndexOf('.'); if (pos == -1) return file; return file.substring(0, pos);
-
findURLRoot
public static java.lang.String findURLRoot(java.lang.String url)
This function returns the root URL-directory of aString
SPECIFICALLY: it searches for the "last forward slash" in aString
, and returns a substring from position 0 to that point. If there aren't any forward slashes in thisString
, null is returned. The front-slash itself is included in the returnedString
.
NOTE: It is similar to the old MS-DOS call to "DIR PART"- Parameters:
url
- AnyString
that is intended to be an "Internet URL" - usually http://domain/directory/[file]- Returns:
- substring(0, index of last front-slash (
'/'
) inString
) - Code:
- Exact Method Body:
1 2 3
int pos = findLastFrontSlashPos(url); if (pos == -1) return null; else return url.substring(0, pos + 1);
-
firstWord
public static java.lang.String firstWord(java.lang.String s)
- Returns:
- After breaking the
String
by white-space, this returns the first 'chunk' before the first whitespace. - Code:
- Exact Method Body:
1 2 3
int pos = s.indexOf(" "); if (pos == -1) return s; else return s.substring(0, pos);
-
removeBrackets
public static java.lang.String removeBrackets(java.lang.String s)
This function will remove any pairs of Brackets within aString
, and returned the paired downString
- Parameters:
s
- AnyString
, which may or may not contain a "Bracket Pair"
For Example:
- This
String
does contain [a pair of brackets] within! - But this
String
does not.
- This
- Returns:
- The same
String
, but with any bracket-pairs removed. - Code:
- Exact Method Body:
1
return remove_(s, '[', ']');
-
removeBraces
public static java.lang.String removeBraces(java.lang.String s)
Functions the same asremoveBrackets(String)
- but removes pairs of curly-braces, instead
NOTE:These are { curly braces } that will be removed by thisString
!- Parameters:
s
- Any validString
{ such as } - (even thisString
).
For Example:
- This
String
does contain {a pair of curly-braces} within! - But this
String
does not.
- This
- Returns:
- The same
String
, but with any curly-brace-pairs removed. - See Also:
removeBrackets(String)
- Code:
- Exact Method Body:
1
return remove_(s, '{', '}');
-
removeParens
public static java.lang.String removeParens(java.lang.String s)
Removes Parenthesis, similar to other parenthetical removing functions.- Parameters:
s
- Any (valid)String
. Below are sample inputs:- This
String
does contain (a pair of parenthesis) within! - But this
String
does not.
- This
- Returns:
- The same
String
, but with any parenthesis removed. - See Also:
removeBrackets(String)
- Code:
- Exact Method Body:
1
return remove_(s, '(', ')');
-
removeAllParenthetical
public static java.lang.String removeAllParenthetical(java.lang.String s)
Removes all parenthetical notations. Calls all remove functions- Parameters:
s
- Any valid string- Returns:
- The same string, but with all parenthesis, curly-brace & bracket pairs removed.
- See Also:
removeParens(String)
,removeBraces(String)
,removeBrackets(String)
- Code:
- Exact Method Body:
1
return removeParens(removeBraces(removeBrackets(s)));
-
escStrForJavaScript
public static java.lang.String escStrForJavaScript(java.lang.String str)
Copied from Stackoverflow.com - and all the "BRILLIANT ENGINEERS"!
Really, I wish I had a reputation!!! So awful...
Question: String.replaceAll single backslahes with double backslashes
I'm trying to convert the String \something\ into the String \\something\\ using replaceAll, but I keep getting all kinds of errors. I thought this was the solution:
theString.replaceAll("\\", "\\\\");
But this gives the below exception:
java.util.regex.PatternSyntaxException: Unexpected internal error near index 1
The String#replaceAll() interprets the argument as a regular expression. The \ is an escape character in both String and regex. You need to double-escape it for regex:
string.replaceAll("\\\\", "\\\\\\\\");
But you don't necessarily need regex for this, simply because you want an exact character-by-character replacement and you don't need patterns here. So String#replace() should suffice:
string.replace("\\", "\\\\");
Update: as per the comments, you appear to want to use the string in JavaScript context. You'd perhaps better use StringEscapeUtils#escapeEcmaScript() instead to cover more characters- Parameters:
str
- This may be any String in java. It is intended to be inserted into a Java-Script file between an open and close quotation marks.- Returns:
- The String that is returned will have certain characters escaped, so that it may be
wrapped in quotation marks and easily inserted into any java-script ".js" text-file.
Escaped-Text:-
char '\'
will be escaped to:"\\"
-
char '/'
will be escaped to:"\/"
, this is required in Java-Script, but not Java! -
char '"'
will be escaped to:"\""
-
char '\n'
will be escaped to:"\\n"
IMPORTANT NOTE: There is no easy, nor clear, way to express what is being replaced and/or escaped in a simple list. You may run this method on anyString
and view for yourself what changes. The primary goal of the method is to allow *any* Java String of *any* length to be converted, wrapped inside of an open and closed quotation-marks, and printed into a Java-Script".js" file
. Escaping "escape characters" which does come up some-what often in HTML text/string processing is near-impossible to explain clearly! Review the stack-overflow "incantation" for possible help. -
- Code:
- Exact Method Body:
1
return StrReplace.r(str, JS_ESCAPE_CHARS, '\\');
-
escStrForRegEx
public static java.lang.String escStrForRegEx(java.lang.String str)
This method should only be used for a preciseString
match using a regular-expression. This method shall 'escape' all characters that the JVM Regular Expression Matcher inpackage java.util.regex.*
would expect be escaped. If the input parameter'str'
contains any regular-expression code, then this method would FAIL as it would escape regular-expression code into unusable text.- Parameters:
str
- This should be anyString
for which the user would like to find an exact match, as-is.- Returns:
- A regular-expression ready
String
- Code:
- Exact Method Body:
1
return StrReplace.r(str, REGEX_ESCAPE_CHARS, '\\');
-
objToB64Str
public static java.lang.String objToB64Str(java.lang.Object o) throws java.io.IOException
This will convert any Serializable Java Object into a base-64 String. ThisString
may be saved, transmitted, even e-mailed to another party, if you wish and decoded else-where.
REQUIREMENTS:- Object must implement the
interface java.io.Serializable
- Receiving party or storage-device must have access to the
.jar file, or .class file(s)
needed to instantiate that object! (You must have shared your classes if you intend to let other people de-serialize instances of that class)
- Parameters:
o
- Any javajava.lang.Object
. This object must be Serializable, or else the code will generate an exception.- Returns:
- A
String
version of this object. It will be:- Serialized using the
java.io.ObjectOutputStream(...)
object-serialization method - Compressed using the
java.io.GZIPOutputStream(...)
stream-compression method - Encoded to a
String
, via Base-64 Encodingjava.util.Base64.getEncoder()
NOTE: Compression does not always make much difference, however often times when doing web-scraping projects, there are large Javajava.util.Vector<String>
filled with many lines of text, and these lists may be instantly and easily saved using object-serialization. Furthermore, in these cases, the compression will sometimes reduce file-size by an order of magnitude. - Serialized using the
- Throws:
java.io.IOException
- See Also:
b64StrToObj(String)
- Code:
- Exact Method Body:
1 2 3 4 5 6
ByteArrayOutputStream bos = new ByteArrayOutputStream(); GZIPOutputStream gzip = new GZIPOutputStream(bos); ObjectOutputStream oos = new ObjectOutputStream(gzip); oos.writeObject(o); oos.flush(); gzip.finish(); oos.close(); bos.close(); return Base64.getEncoder().encodeToString(bos.toByteArray());
- Object must implement the
-
b64StrToObj
public static java.lang.Object b64StrToObj(java.lang.String str) throws java.io.IOException
This converts to any java.io.Serializable object from a compressed, serialized, Base-64 Encodedjava.lang.String
. This method can be thought of as one which converts objects which have been previously encoded as aString
, and possibly even transmitted across the internet, back into an JavaObject
.
REQUIREMENTS: TheObject
that is to be instantiated must have its class files accessible to the class-loader. This is the exact-same requirement expected by all Java "de-serializations" routines.- Parameters:
str
- Any previously Base-64 encoded, serialized, compressedjava.lang.Object'
that has been saved as aString
. ThatString
should have been generated using theProgramming.objToB64Str(Object o)
method in this class.- Serialized using the
java.io.ObjectOutputStream(...)
object-serialization method - Compressed using the
java.io.GZIPOutputStream(...)
sream-compression method - Encoded to a
String
, via Base-64 Encodingjava.util.Base64.getEncoder()
NOTE: Compression does not always make much difference, however often times when doing web-scraping projects, there are large Javajava.util.Vector<String>
filled with many lines of text, and these lists may be instantly and easily saved using object-serialization. Furthermore, in these cases, the compression will sometimes reduce file-size by an order of magnitude.- Serialized using the
- Returns:
- The de-compressed
java.lang.Object
converted back from aString
. - Throws:
java.io.IOException
- See Also:
objToB64Str(Object)
- Code:
- Exact Method Body:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
ByteArrayInputStream bis = new ByteArrayInputStream(Base64.getDecoder().decode(str)); GZIPInputStream gzip = new GZIPInputStream(bis); ObjectInputStream ois = new ObjectInputStream(gzip); Object ret = null; try { ret = ois.readObject(); } catch (ClassNotFoundException e) { throw new IOException( "There were no serialized objects found in your String. See e.getCause();", e ); } bis.close(); ois.close(); return ret;
-
objToB64MimeStr
public static java.lang.String objToB64MimeStr(java.lang.Object o) throws java.io.IOException
This performs an identical operation as the method:objToB64Str
, however it generates an outputString
that is "MIME" compatible. All this means is that theString
itself - which could conceivable by thousands or even hundreds of thousands of characters long - will havenew-line characters
inserted such that it may be printed on paper or included in a text-file that is (slightly) more human-readable. Base64 MIME encodedString's
look like very long paragraphs of random-text data, while regular Base64-encodings are a single, very-long,String
with no space characters.- Parameters:
o
- Anyjava.lang.Object
. This object must be Serializable, or else the code will generate an exception.- Returns:
- A Base-64 MIME Encoded
String
version of any serializablejava.lang.Object
. - Throws:
java.io.IOException
- See Also:
objToB64Str(Object)
,b64MimeStrToObj(String)
- Code:
- Exact Method Body:
1 2 3 4 5 6 7
ByteArrayOutputStream bos = new ByteArrayOutputStream(); GZIPOutputStream gzip = new GZIPOutputStream(bos); ObjectOutputStream oos = new ObjectOutputStream(gzip); oos.writeObject(o); oos.flush(); gzip.finish(); oos.close(); bos.close(); return Base64.getMimeEncoder().encodeToString(bos.toByteArray());
-
b64MimeStrToObj
public static java.lang.Object b64MimeStrToObj(java.lang.String str) throws java.io.IOException
This performs an identical operation as the method:b64StrToObj
, however receives a "MIME" compatible encodedString
. All this means is that theString
itself - which could conceivable by thousands or even hundreds of thousands of characters long - will havenew-line characters
inserted such that it may be printed on paper or included in a text-file that is (slightly) more human-readable. Base64 MIME encodedString's
look like very long paragraphs of random-text data, while regular Base64 encodings a single, very-long,String's
.- Returns:
- The (de-serialized) java object that was read from the input parameter
String 'str'
REQUIREMENTS: The object that is to be instantiated must have its class files accessible to the class-loader. This is the exact-same requirement expected by all Java "de-serializations" routines. - Throws:
java.io.IOException
- See Also:
b64StrToObj(String)
,objToB64MimeStr(Object)
- Code:
- Exact Method Body:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
ByteArrayInputStream bis = new ByteArrayInputStream(Base64.getMimeDecoder().decode(str)); GZIPInputStream gzip = new GZIPInputStream(bis); ObjectInputStream ois = new ObjectInputStream(gzip); Object ret = null; try { ret = ois.readObject(); } catch (ClassNotFoundException e) { throw new IOException( "There were no serialized objects found in your String. See e.getCause();", e ); } bis.close(); ois.close(); return ret;
-
dotDots
public static java.lang.String dotDots(java.lang.String fileName, java.lang.String ancestorDirectory, char separator)
Computes a "relativeURL String
".- Parameters:
fileName
- This is a fileName whose ancestor directory needs to be 'relative-ised'ancestorDirectory
- This is an ancestor (container) directory.separator
- The separator character used to separate file-system directory names.- Returns:
- This shall return the "../.." structure needed to insert a relative-
URL
or link into a web-page. - Throws:
java.lang.IllegalArgumentException
- This exception shall throw if the separator character is not one of the standard file & directory separators: forward-slash'/'
or back-slash'\'
.
This exception also throws if theString
provided to parameter'fileName'
does not begin-with theString
provided to parameter'ancestorDirectory'
.- Code:
- Exact Method Body:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
if ((separator != '/') && (separator != '\\')) throw new IllegalArgumentException( "The separator character provided to this method must be either a forward-slash '/' " + "or a back-slash ('\\') character. You have provided: ['" + separator + "']." ); if (! fileName.startsWith(ancestorDirectory)) throw new IllegalArgumentException( "The file-name you have provided [" + fileName + "] is a String that does " + "start with the ancestorDirectory String [" + ancestorDirectory + "]. " + "Therefore there is no relative path using the dot-dot construct to the named " + "ancestor directory fromm the directory where the named file resides." ); int levelsDeep = StringParse.countCharacters(fileName, separator) - StringParse.countCharacters(ancestorDirectory, separator); String dotDots = ""; while (levelsDeep-- > 0) dotDots = dotDots + ".." + separator; return dotDots;
-
dotDotParentDirectory
public static java.lang.String dotDotParentDirectory(java.net.URL url)
Convenience Method. InvokesdotDotParentDirectory(String, char, short)
.
ConvertsURL
toString
, eliminates non-essentialURI
-information (Such as:ASP, JSP, PHP Query-Strings, and others too
)
Passeschar '/'
, the separator character used inURL's
Passes'1'
to parameter'nLevels'
- only going up on directory.- Code:
- Exact Method Body:
1 2
String urlStr = url.getProtocol() + "://" + url.getHost() + url.getPath(); return dotDotParentDirectory(urlStr, '/', (short) 1);
-
dotDotParentDirectory
public static java.lang.String dotDotParentDirectory (java.lang.String urlAsStr)
Convenience Method. InvokesdotDotParentDirectory(String, char, short)
.
Passeschar '/'
, the separator character used inURL's
Passes'1'
to parameter'nLevels'
- only going up on directory.- Code:
- Exact Method Body:
1
return dotDotParentDirectory(urlAsStr, '/', (short) 1);
-
dotDotParentDirectory
public static java.lang.String dotDotParentDirectory(java.net.URL url, short nLevels)
Convenience Method. InvokesdotDotParentDirectory(String, char, short)
.
ConvertsURL
toString
, eliminates non-essentialURI
-information (Such as:ASP, JSP, PHP Query-Strings, and others too
)
Passeschar '/'
, the separator character used inURL's
- Code:
- Exact Method Body:
1 2
String urlStr = url.getProtocol() + "://" + url.getHost() + url.getPath(); return dotDotParentDirectory(urlStr, '/', nLevels);
-
dotDotParentDirectory
public static java.lang.String dotDotParentDirectory (java.lang.String urlAsStr, short nLevels)
Convenience Method. InvokesdotDotParentDirectory(String, char, short)
.
Passeschar '/'
, the separator character used inURL's
.- Code:
- Exact Method Body:
1
return dotDotParentDirectory(urlAsStr, '/', nLevels);
-
dotDotParentDirectory
public static java.lang.String dotDotParentDirectory (java.lang.String directoryStr, char dirSeparator)
Convenience Method. InvokesdotDotParentDirectory(String, char, short)
.
Passes'1'
to parameternLevels
- only going up one directory.- Code:
- Exact Method Body:
1
return dotDotParentDirectory(directoryStr, dirSeparator, (short) 1);
-
dotDotParentDirectory
public static java.lang.String dotDotParentDirectory (java.lang.String directoryStr, char separator, short nLevels)
This does traverses up a directory-tree structure, and returns a 'parent-level' directory that is'nLevels'
up the tree.
NOTE: The character used as the "File Separator" and/or "Directory Separator" can be obtained using the field:java.io.File.Separator.charAt(0).
The classjava.io.File
provides access to the file-separator used by the file-system on which the JVM is currently running, although it treats it as a multi-characterString
. Just use the commonly-used java method'charAt(0)'
to obtain the forward-slash'/'
or backward-slash'\'
character.
IMPORTANT: There is no error-checking performed by this method regarding whether the inputString
represents a valid file or directory. Instead, this method just looks for the second from last separator-character (usually a'/'
forward-slash char) and returns a substring that starts at index 0, and continues to that position-plus-1 (in order to include that second-to-last separator char).- Parameters:
directoryStr
- This may be any java-String
, although it is expected to be on which represents the file & directory structure of file on the file-system. It may also beURL
for a web-siteseparator
- This is the separator currently used by that file & directory system. If trying to find the parent directory of aURL
, this should be the forward-slash character'/'
.nLevels
- This is how many "parent-level directories" (how many levels up the tree) need to be computed. This parameter must '1' or greater. If the passed parameter'directoryStr'
does not contain enough directories to traverse up the tree, then this method will throw anIllegalArgumentException
.- Returns:
- a
String
that represents 'nLevels' up the directory tree, either for a directory on the local-file system, or on a web-server from a Uniform Resource Locator. - Throws:
java.lang.IllegalArgumentException
- If the value of parametershort 'nLevels'
is negative, or does not identify a number consistent with the number of directories that are contained by the input urlAsStr parameter.
This exception shall also throw if the'separator'
character is not one of the standard file & directory separators: forward-slash'/'
or back-slash'\'
.- Code:
- Exact Method Body:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
if (nLevels < 1) throw new IllegalArgumentException( "The parameter nLevels may not be less than 1, nor negative. You have passed: " + nLevels ); if ((separator != '/') && (separator != '\\')) throw new IllegalArgumentException( "The separator character provided to this method must be either a forward-slash '/' " + "or a back-slash ('\\') character. You have provided: ['" + separator + "']." ); int count = 0; for (int i=directoryStr.length() - 1; i >= 0; i--) if (directoryStr.charAt(i) == separator) if (++count == (nLevels + 1)) return directoryStr.substring(0, i + 1); throw new IllegalArgumentException( "The parameter nLevels was: " + nLevels + ", but unfortunately there only were: " + count + "'" + separator + "' characters found in the directory-string." );
-
trimEachLine
public static java.lang.String trimEachLine(java.lang.String str)
This is used for "trimming each line" of an inputString
. Generally, when dealing with HTML there may be superfluous white-space that is useful in some places, but not necessarily when HTML is copied and pasted to other sections of a page (or to another page, altogether). This will split aString
by new-line characters, and then trim each line, and afterward rebuild theString
and return it.
NOTE: This will only split theString
using the standard'\n'
character. If theString
being used uses'\r'
or'\n\r'
, use a different trim.- Parameters:
str
- This may be anyString
. It will be split by new-line characters'\n'
- Returns:
- Returns the rebuilt
String
, with each line having aString.trim();
operation performed. - Code:
- Exact Method Body:
1 2 3 4 5 6 7
StringBuilder sb = new StringBuilder(); for (String s : str.split("\\n")) if ((s = s.trim()).length() == 0) continue; else sb.append(s + '\n'); return sb.toString().trim();
-
parseGenericType
public static java.lang.String[] parseGenericType (java.lang.String genericTypeParamOrDefinition)
Parses aString
such asT extends TreeMap<Integer, List<String>>
. It is strictly used, to only parse the generic-definition lists that are at the top of generic classes and interfaces.Sample Input String
Output String[] array
"HashMap<E extends Comparable, F extends Comparable>"
{ "E extends Comparable", "F extends Comparable" }
"Ret6<A, B, C, D, E, F>"
{ "A", "B", "C", "D", "E", "F" }
"AbstractHNLI<?, Vector<Vector<? extends HTMLNode>>>"
{ "?", "Vector<Vector<? extends HTMLNode>>" }
"VarList<Vector<HashMap<String, String>>, FileNode>"
{ "Vector<HashMap<String, String>>", "FileNode" }
- Parameters:
genericTypeParamOrDefinition
- This should beString
retrieved from inside the less-than ('<'
) and greater-than ('>'
) symbols. For example, forSortedList<A extends Comparable, B>
theString
passed to this method should be"A extends Comparable, B"
- Returns:
- This should break down this
CSV
(comma separated value) list into individualString's
. - Throws:
NoMatchException
- if the inputString
parameter does not match the generics regular-expressionGENERIC_PARAMS
.StringFormatException
- If the inputString
could not be parsed.- Code:
- Exact Method Body:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
Matcher m = GENERIC_PARAMS.matcher(genericTypeParamOrDefinition); String innerGenericStr = m.find() ? m.group(1) : null; if (innerGenericStr == null) throw new NoMatchException( "The provided value to parameter 'genericTypeParamOrDefinition' [" + genericTypeParamOrDefinition + "] did not match the Java Generics " + "Regular-Expression:\n" + GENERIC_PARAMS.toString() ); Stream.Builder<String> b = Stream.builder(); String[] sArr = innerGenericStr.split(","); for (int i=0; i < sArr.length; i++) // We have shifted elements, and now all of the remaining elements would be null // return immediately if (sArr[i] == null) return b.build().toArray(String[]::new); // Simple generic-type definition: has no "sub-generics" or "inner-generics" // Add this to the list, and move on, else if ((! sArr[i].contains("<")) && (! sArr[i].contains(">"))) b.accept(sArr[i].trim()); // This is a generic-type definition that has at least one "sub-generic" // If there are an equal number of '<' and '>' then there were no commas // in between the sub-generics. Add this to this list, and move on. else if (countCharacters(sArr[i], '<') == countCharacters(sArr[i], '>')) b.accept(sArr[i].trim()); // There was a generic with a sub-generic that had a comma... else { // If we have reached the end of the String, the number of greater than and // less than symbols was not balanced. if (i == (sArr.length - 1)) throw new StringFormatException( "The provided value to parameter 'genericTypeParamOrDefinition' [" + genericTypeParamOrDefinition + "], was not properly formatted, and could not be " + "parsed." ); // Join the next String Array Element with the current one. sArr[i] = sArr[i].trim() + ", " + sArr[i + 1].trim(); // Shift the rest of the array left. for (int j=i+1; j < (sArr.length-1); j++) sArr[j] = sArr[j+1]; sArr[sArr.length - 1] = null; // decrement the counter to retest this array-index location i--; } // Return the list return b.build().toArray(String[]::new);
-
replaceNBSP
public static java.lang.String replaceNBSP(java.lang.String s)
There are actually people out there who are willing to put character'160'
into a file or document, instead of a simple' '
element. How rude. Any instances of this character shall be replaced with the standard space characterASCII #32
.- Parameters:
s
- AnyString
will pass. GenerallyString's
that were converted from HTML pages will containchar #160
as it is occasionally translated from the HTML escape sequence
- Returns:
- A String where any instance of white-space character
#160
have been replaced with character#32
- Code:
- Exact Method Body:
1
return s.replace(("" + ((char) 160)), " ");
-
replaceZWSP
public static java.lang.String replaceZWSP(java.lang.String s)
Even lower than#160
, apparently is the"Zero Width Space"
(character#8203
. This is actually inserted by the JavaDoc Tool (bySun / Oracle
) into JavaDoc generated HTML Pages. Here, it shall be replaced by character#32
- the space-character.
A.K.A.:""
.
Can you see the character, above? No? That's zero width space for you! If you ever sitting and wondering why aString
seems to be something else than what it looks like - you might have a zero-width space in yourString
. If so, it will take a while to find the bug.- Parameters:
s
- AnyString
will pass. GenerallyString's
that were converted from JavaDoc HTML pages will containchar #8203
.- Returns:
- A String where any instance of white-space character
#8203
have been replaced with character#32
- Code:
- Exact Method Body:
1
return s.replace(("" + ((char) 8203)), " ");
-
firstNLines
public static java.lang.String firstNLines(java.lang.String s, int n)
This will retrieve the first'n'
lines of aString
- where a line is defined as everything up to and including the next newline'\n'
character.- Parameters:
s
- Any javaString
.n
- This is the number of lines of text to retrieve.- Returns:
- a substring of s where the last character in the
String
is a'\n'
. The last character should be the nth'\n'
character found in s. If there is no such character, then the originalString
shall be returned instead. - Throws:
NException
- This exception shall throw if parameter'n'
is less than 1, or longer thans.length()
.- Code:
- Exact Method Body:
1 2 3 4 5
NException.check(n, s); int pos = StrIndexOf.nth(s, n, '\n'); if (pos != -1) return s.substring(0, pos + 1); else return s;
-
lastNLines
public static java.lang.String lastNLines(java.lang.String s, int n)
This will retrieve the last 'n' lines of aString
- where a line is defined as everything up to and including the next newline'\n'
character.- Parameters:
s
- Any javaString
.n
- This is the number of lines of text to retrieve.- Returns:
- a substring of
's'
where the last character in theString
is a new-line character'\n'
, and the first character is the character directly before the nth newline'\n'
found in's'
- starting the count at the end of theString
. If there is no such substring, then the originalString
shall be returned. - Throws:
NException
- This exception shall throw if'n'
is less than 1, or longers.length()
.- Code:
- Exact Method Body:
1 2 3 4 5
NException.check(n, s); int pos = StrIndexOf.nthFromEnd(s, n, '\n'); if (pos != -1) return s.substring(pos + 1); else return s;
-
isInteger
public static boolean isInteger(java.lang.String s)
Determines, efficiently, whether an inputString
is also an integer.
NOTE: A leading plus-sign ('+'
) will, in fact, generate a FALSE return-value for this method.- Parameters:
s
- Any javaString
- Returns:
- TRUE if the input
String
is any integer, and false otherwise.
NOTE: This method does not check whether the number, itself, will actually fit into a field or variable of type'int'
. For example, the inputString '12345678901234567890'
(a very large integer), though an integer from a mathematical perspective, is not a valid java'int'
. In such cases, TRUE is returned, but if Java'sInteger.parseInt
method were subsequently used, that method would throw an exception.
NOTE: The primary purpose of this method is to avoid having to writetry {} catch (NumberFormatException)
code-blocks. Furthermore, if only a check is desired, and theString
does not actually need to be converted to a number, this is also more efficient than actually performing the conversion. - See Also:
isInt(String)
- Code:
- Exact Method Body:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
if (s == null) return false; int length = s.length(); if (length == 0) return false; int i = 0; if (s.charAt(0) == '-') { if (length == 1) return false; i = 1; } while (i < length) { char c = s.charAt(i++); if (c < '0' || c > '9') return false; } return true;
-
isInt
public static boolean isInt(java.lang.String s)
Convenience Method. InvokesisOfPrimitiveType(String, char[])
. Passes ASCII characters that compriseInteger.MIN_VALUE
(without a negative sign).- Code:
- Exact Method Body:
1
return isOfPrimitiveType(s, INT_MIN_VALUE_DIGITS_AS_CHARS);
-
isLong
public static boolean isLong(java.lang.String s)
Convenience Method. InvokesisOfPrimitiveType(String, char[])
. Passes ASCII characters that compriseLong.MIN_VALUE
(without a negative sign).- Code:
- Exact Method Body:
1
return isOfPrimitiveType(s, LONG_MIN_VALUE_DIGITS_AS_CHARS);
-
isByte
public static boolean isByte(java.lang.String s)
Convenience Method. InvokesisOfPrimitiveType(String, char[])
. Passes ASCII characters that compriseByte.MIN_VALUE
(without a negative sign).- Code:
- Exact Method Body:
1
return isOfPrimitiveType(s, BYTE_MIN_VALUE_DIGITS_AS_CHARS);
-
isShort
public static boolean isShort(java.lang.String s)
Convenience Method. InvokesisOfPrimitiveType(String, char[])
. Passes ASCII characters that compriseShort.MIN_VALUE
(without a negative sign).- Code:
- Exact Method Body:
1
return isOfPrimitiveType(s, SHORT_MIN_VALUE_DIGITS_AS_CHARS);
-
isOfPrimitiveType
protected static boolean isOfPrimitiveType(java.lang.String s, char[] minArr)
Determines whether the inputString
is an integer in the range of Java's primitive type specified by an inputchar[]
array parameter. Specifically, if the the inputString
is both a mathematical integer, and also an integer in the range ofMIN_VALUE
andMAX_VALUE
for that primitive-type and then (and only then) will TRUE be returned.
NOTE: The max and min values in which the range of valid integers must reside (for primitive-type'int'
, for instance) are as below:-2147483648
...2147483647
.
ALSO: A leading plus-sign ('+'
) will, in fact, generate a FALSE return-value for this method.- Parameters:
s
- Any JavaString
minArr
- The value of a Java PrimitiveMIN_VALUE
, without the minus-sign, represented as achar[]
array.Primitive Type Integer as ASCII char[]
arraybyte
'2', '5', '6'
short
'6', '5', '5', '3', '6'
int
'2', '1', '4', '7,' '4', '8', '3', '6', '4', '8'
long
'2', '1', '4', '9', '2', '2', '3', '3', '7', '2', '0', '3', '6', '8', '5', '4', '7', '7', '5', '8', '0', '8'
- Returns:
- TRUE If the input
String
is both an integer, and also one which falls in the range comprised by the specified Java Primitive Type. Return FALSE otherwise.
NOTE: The primary purpose of this method is to avoid having to writetry {} catch (NumberFormatException)
code-blocks. Furthermore, if only a check is desired, and theString
does not actually need to be converted to a number, this is also more efficient than actually performing the conversion. - See Also:
isInteger(String)
,isInt(String)
,isByte(String)
,isLong(String)
,isShort(String)
- Code:
- Exact Method Body:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
int length = s.length(); // Zero length string's are not valid integers. if (length == 0) return false; // A negative integer may begin with a minus-sign. boolean negative = s.charAt(0) == '-'; // **************************************************************************************** // If the string is too short or too long, this method doesn't need to do any work. // We either know the answer immediately (too long), or we can call the simpler method // (in the case that it is too short) // If a string is shorter than (for type 'int', for example): 2147483647 (10 chars) // then we ought use the simplified method which just checks if the string is an integer. if (length < minArr.length) return isInteger(s); // If the string is longer than (for type 'int', for example): -2147483648 (11 chars) // then it cannot be an integer that fits into primitive 'int', so return false. if (length > (minArr.length + 1)) return false; // If the String is *EXACTLY* 11 characters long (for primitive-type 'int', for example), // but doesn't begin with a negative sign, we also know the answer immediately. if ((!negative) && (length == (minArr.length + 1))) return false; // If the String *EXACTLY* the length of MAX_NUUMBER, but it begins with a negative sign, // we can call the simplified method, instead as well. if (negative && (length == minArr.length)) return isInteger(s); // The **REST** of the code is only executed if the numeric part of the String // (Specifically: leaving out the '-' negative sign, which may or may not be present) // ... if the numeric part of the String is precisely the length of MAX_VALUE / MAX_NUMBER // as determined by the length of the array 'minArr'... If the input string is // **PRECISELY** that length, then the string must be checked in the loop below. int i = negative ? 1 : 0; int j = 0; boolean guaranteedFitIfInteger = false; char c = 0; while (i < length) { c = s.charAt(i); if (! guaranteedFitIfInteger) { if (c > minArr[j]) return false; if (c < minArr[j]) guaranteedFitIfInteger = true; } if (c < '0') return false; if (c > '9') return false; i++; j++; } // THE COMMENT BELOW DELINEATES WHAT HAPPENS FOR THE INPUT-CASE OF PRIMITIVE-TYPE 'INT' // (2147483648)... But it generalizes for byte, short, and long as well. // This might seem very strange. Since the MIN_VALUE ends with an '8', but the // MAX_VALUE ends with a '7', and since we are checking each character to see that // it falls within the array above, **RATHER THAN** just returning TRUE right here, // we have to catch the **LONE** border/edge case where some joker actually passed the // String 2147483648 - which must return FALSE, since the last positive integer is // 2147483647 (see that it has an ending of '7', rather than an '8'). return guaranteedFitIfInteger || negative || (c != minArr[minArr.length-1]);
-
-