Java: Difference between revisions
Jump to navigation
Jump to search
m (→Debug) |
(→How-To: Generate a string of repeating characters) |
||
Line 124: | Line 124: | ||
;[http://www.javaworld.com/javaworld/javatips/jw-javatip124.html?page=1 Throwable.getStackTrace()] |
;[http://www.javaworld.com/javaworld/javatips/jw-javatip124.html?page=1 Throwable.getStackTrace()] |
||
:Could be used to get the name of current class / methods for debug... |
:Could be used to get the name of current class / methods for debug... |
||
== How-To == |
|||
=== Generate a string of repeating characters === |
|||
On Java 1.4.2: |
|||
<source lang="java"> |
|||
String repeatchar(char c, int len) |
|||
{ |
|||
char [] a = new char[len]; |
|||
Arrays.fill(a, c); |
|||
return new String(a); |
|||
} /* repeatchar */ |
|||
</source> |
|||
Other pointers: |
|||
* Check <code>java.util.Formatter</code> |
|||
* Apache StringUtils has several methods: leftPad, rightPad, center and repeat. http://www.jdocs.com/lang/2.1/org/apache/commons/lang/StringUtils.html |
|||
=== Pad a string === |
|||
On Java 1.4.2 (see [http://www.rgagnon.com/javadetails/java-0448.html]): |
|||
<source lang="java"> |
|||
public static String padString(String s, int n, char c, boolean padLeft) |
|||
{ |
|||
if ( null == s ) { |
|||
return null; |
|||
} |
|||
int npad = n - s.length(); |
|||
if ( npad < 0 ) { |
|||
return s; |
|||
} |
|||
char [] pad = new char [npad]; |
|||
Arrays.fill(pad, c); |
|||
return ( padLeft ) ? new String(pad) + s : s + new String(pad); // TODO: Faster to use StringBuffer, and insert/append? |
|||
} /* padString */ |
|||
</source> |
|||
On Java 1.5, use <code>String.format</code>: |
|||
<source lang="java"> |
|||
public static String padRight(String s, int n) { |
|||
return String.format("%1$-" + n + "s", s); |
|||
} |
|||
public static String padLeft(String s, int n) { |
|||
return String.format("%1$#" + n + "s", s); |
|||
} |
|||
</source> |
|||
Other pointers: |
|||
* For formatting numbers, use <code>java.text.DecimalFormat</code> (see [http://download.oracle.com/javase/tutorial/java/data/numberformat.html]) |
|||
* Since Java 1.5, one should prefer using <code>StringBuilder</code> over <code>StringBuffer</code>. |
|||
* rosettacode.org contains more code snippets for any language ([http://rosettacode.org/wiki/Repeat_a_string#Java]) |
|||
== Debug == |
== Debug == |
Revision as of 21:23, 26 October 2011
Other pages
Links
java.exe Command-Line
-Djava.library.path=<dllpath>
- Set path to find DLL Libraries
-jar <jarfile>
- Set jar file to load (should contain main())
java -Djava.library.path=.\var -jar "$(MYROOT)\var\main.jar"
Sample Program
- Create a file HelloWorld.java, with content:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
for (int i = 0; i < args.length; i++)
System.out.print(0 == i ? args[i] : " " + args[i]);
System.out.println();
}
}
- Compile (javac must be in the path):
javac HelloWorld.java
- Run:
java HelloWorld
Syntax 1.4
Arrays
- Index is 0-based
- Array base type can be any primitive type or reference types.
new
allocates room for primitive types, or for references (not for object instance themselves).- After creation, arrays cannot grow or shrink. For dynamic arrays, consider using
ArrayList
class.
// Declaration
int [] arrayOfInts; // preferred declaration style
int arrayOfInts []; // ... c-style
// Creation and Initialization
int arrayOfInts [] = new int [42]; // declaration and creation (set to 0)
arrayOfInts[0] = 69;
String [] someStrings = new String [ 3 ]; // ... idem (set to null)
String [] someStrings = { null, null, null }; // ... same as above
String [] someStrings = { "hello", new String(), someStuff.toString(), null };
// Anonymous arrays
setPets ( new Animal [] { new Dog("gray"), new Cat("grey"), new Cat("orange") });
// Get array length
int aLen = arrayOfInts.length
Syntax 1.5
For loops
Foreach loops (available since 1.5) [1]:
- More readable
- Series of values
- Arrays and Collections
- Applies to Iterable<E>.
But
- Only access.
- Only single structure.
- Only single element.
- Only forward.
- At least Java 5.
FOR EACH loop | Equivalent FOR loop |
---|---|
for (type var : arr) {
body-of-loop
}
|
for (int i = 0; i < arr.length; i++) {
type var = arr[i];
body-of-loop
}
|
for (type var : coll) {
body-of-loop
}
|
for (Iterator<type> iter = coll.iterator(); iter.hasNext(); ) {
type var = iter.next();
body-of-loop
}
|
Miscellaneous
- Class Literal
- A class literal is an expression consisting of the name of a class, interface, array, or primitive type followed by a
.
and the tokenclass
. The type of a class literal isClass
. It evaluates to the Class object for the named type (or for void) as defined by the defining class loader of the class of the current instance. - Eg:
public class MyClass //...
//...
printf ("Class name is %s\n",MyClass.class.getName());
- Throwable.getStackTrace()
- Could be used to get the name of current class / methods for debug...
How-To
Generate a string of repeating characters
On Java 1.4.2:
String repeatchar(char c, int len)
{
char [] a = new char[len];
Arrays.fill(a, c);
return new String(a);
} /* repeatchar */
Other pointers:
- Check
java.util.Formatter
- Apache StringUtils has several methods: leftPad, rightPad, center and repeat. http://www.jdocs.com/lang/2.1/org/apache/commons/lang/StringUtils.html
Pad a string
On Java 1.4.2 (see [2]):
public static String padString(String s, int n, char c, boolean padLeft)
{
if ( null == s ) {
return null;
}
int npad = n - s.length();
if ( npad < 0 ) {
return s;
}
char [] pad = new char [npad];
Arrays.fill(pad, c);
return ( padLeft ) ? new String(pad) + s : s + new String(pad); // TODO: Faster to use StringBuffer, and insert/append?
} /* padString */
On Java 1.5, use String.format
:
public static String padRight(String s, int n) {
return String.format("%1$-" + n + "s", s);
}
public static String padLeft(String s, int n) {
return String.format("%1$#" + n + "s", s);
}
Other pointers:
- For formatting numbers, use
java.text.DecimalFormat
(see [3]) - Since Java 1.5, one should prefer using
StringBuilder
overStringBuffer
. - rosettacode.org contains more code snippets for any language ([4])
Debug
- References
Logging:
- http://java.sun.com/j2se/1.4.2/docs/guide/util/logging/
- http://commons.apache.org/logging/
- http://logging.apache.org/log4j/1.2/index.html
Dynamic Proxy:
- Java Trace
- cfr [5]
- Profilers
- Aspect-Oriented Programming
Some sample code:
private static final String ANSI_PURPLE = (char) 27 + "[35m";
private static final String ANSI_NONE = (char) 27 + "[0m";
public static String getMethodName()
{
return getMethodName(1);
}
public static String getMethodName(int idx)
{
return new Throwable().getStackTrace()[1].getMethodName();
}
public static String getFileMethodLine()
{
return getFileMethodLine(1);
}
public static String getFileMethodLine(int idx)
{
StackTraceElement e = new Throwable().getStackTrace()[idx];
//return e.getClassName() + "." + e.getMethodName() + "(" + e.getFileName() + ":" + e.getLineNumber() + ")"; // Java like
return e.getFileName() + " " + e.getMethodName() + ":" + e.getLineNumber(); // C like
}
public static void debug(String s)
{
System.out.println(ANSI_PURPLE + getFileMethodLine(2) + ANSI_NONE + " " + s);
}
References
String Integer.toHexString(byte); // Convert an integer to string in hexadecimal
"00" + Integer.toHexString( i ) // Pad with leading zeros (then take rightmost characters)
String.format("%04x",0x2a);
//Prepend 0 if needed
String hex = Integer.toHexString(abyte & 0xff);
StringBuffer hexbuf = new StringBuffer();
if (hex.length() == 1) hexbuf.append('0');
hexbuf.append(hex);
//Prepend 0 if needed
String hex=Integer.toHexString(aInt); // Assume 0<= aInt <= 255 (i.e. positive!)
System.out.print((hex.length()>1? "" : "0") + hex + ", ");