diff --git a/docs/exPuzzlers/kotlin/std.kt b/docs/exPuzzlers/kotlin/std.kt index 3ea1a381dac..ba01f1845f8 100644 --- a/docs/exPuzzlers/kotlin/std.kt +++ b/docs/exPuzzlers/kotlin/std.kt @@ -11,6 +11,12 @@ fun array(vararg array : Float) = array fun Any?.identityEquals(other : Any?) = this === other +fun T?.npe() : T { + if (this == null) + throw NullPointerException() + return this; +} + namespace io { import java.io.* @@ -46,4 +52,10 @@ namespace io { } return stdin?.readLine() } +} + +namespace string { + fun String.replaceAll(pattern : String, replacement : String) : String { + return java.util.regex.Pattern.compile(pattern).matcher(this).replaceAll(replacement).npe() + } } \ No newline at end of file diff --git a/docs/exPuzzlers/src/_03_character/_14_Escape_Rout/EscapeRout.java b/docs/exPuzzlers/src/_03_character/_14_Escape_Rout/EscapeRout.java new file mode 100644 index 00000000000..76f8beca484 --- /dev/null +++ b/docs/exPuzzlers/src/_03_character/_14_Escape_Rout/EscapeRout.java @@ -0,0 +1,12 @@ +package _03_character._14_Escape_Rout; + +/** + * Bloch, Joshua; Gafter, Neal (2005-06-24). Java™ Puzzlers: Traps, Pitfalls, and Corner Cases (p. 31). Pearson Education (USA). Kindle Edition. + */ +public class EscapeRout { + public static void main(String[ ] args) { + // \u0022 is the Unicode escape for double quote (") + System.out.println("a\u0022.length( ) + \u0022b".length( )); + } +} + diff --git a/docs/exPuzzlers/src/_03_character/_14_Escape_Rout/EscapeRout.kt b/docs/exPuzzlers/src/_03_character/_14_Escape_Rout/EscapeRout.kt new file mode 100644 index 00000000000..072690e498b --- /dev/null +++ b/docs/exPuzzlers/src/_03_character/_14_Escape_Rout/EscapeRout.kt @@ -0,0 +1,12 @@ +namespace escape.rout + +import std.io.* +import std.* + +fun main(args : Array) { + // \u0022 is the Unicode escape for double quote (") + println("a\u0022.length( ) + \u0022b".length) + + // The actual string: + println("a\u0022.length( ) + \u0022b") +} \ No newline at end of file diff --git a/docs/exPuzzlers/src/_03_character/_15_Hello_Whirled/Test.java b/docs/exPuzzlers/src/_03_character/_15_Hello_Whirled/Test.java new file mode 100644 index 00000000000..354241f8f26 --- /dev/null +++ b/docs/exPuzzlers/src/_03_character/_15_Hello_Whirled/Test.java @@ -0,0 +1,16 @@ +package _03_character._15_Hello_Whirled; + +// Bloch, Joshua; Gafter, Neal (2005-06-24). Java™ Puzzlers: Traps, Pitfalls, and Corner Cases (p. 33). Pearson Education (USA). Kindle Edition. + +/** + * Generated by the IBM IDL-to-Java compiler, version 1.0 + * from F:\TestRoot\apps\a1\ units\include\PolicyHome.idl <-- DELETE THE SPACE BEFORE 'u' + * Wednesday, June 17, 1998 6:44:40 o'clock AM GMT+00:00 + */ +public class Test { + public static void main(String[] args) { + System.out.print("Hell"); + System.out.println("o world"); + } +} + diff --git a/docs/exPuzzlers/src/_03_character/_15_Hello_Whirled/Test.kt b/docs/exPuzzlers/src/_03_character/_15_Hello_Whirled/Test.kt new file mode 100644 index 00000000000..8b65f7c8508 --- /dev/null +++ b/docs/exPuzzlers/src/_03_character/_15_Hello_Whirled/Test.kt @@ -0,0 +1,14 @@ +namespace hello.whirled + +import std.io.* +import std.* + +/** + * Generated by the IBM IDL-to-Java compiler, version 1.0 + * from F:\TestRoot\apps\a1\units\include\PolicyHome.idl + * Wednesday, June 17, 1998 6:44:40 o'clock AM GMT+00:00 + */ +fun main(args : Array) { + print("Hell"); + println("o world"); +} diff --git a/docs/exPuzzlers/src/_03_character/_16_Line_Printer/LinePrinter.java b/docs/exPuzzlers/src/_03_character/_16_Line_Printer/LinePrinter.java new file mode 100644 index 00000000000..bb38614c606 --- /dev/null +++ b/docs/exPuzzlers/src/_03_character/_16_Line_Printer/LinePrinter.java @@ -0,0 +1,13 @@ +package _03_character._16_Line_Printer; + +/** + * Bloch, Joshua; Gafter, Neal (2005-06-24). Java™ Puzzlers: Traps, Pitfalls, and Corner Cases (p. 35). Pearson Education (USA). Kindle Edition. + */ +public class LinePrinter { + public static void main(String[] args) { + // Note: \ u000A is Unicode representation of linefeed (LF) <-- DELETE THE SPACE BEFORE 'u' + char c = 0x000A; + System.out.println(c); + } +} + diff --git a/docs/exPuzzlers/src/_03_character/_16_Line_Printer/LinePrinter.kt b/docs/exPuzzlers/src/_03_character/_16_Line_Printer/LinePrinter.kt new file mode 100644 index 00000000000..086a986e07d --- /dev/null +++ b/docs/exPuzzlers/src/_03_character/_16_Line_Printer/LinePrinter.kt @@ -0,0 +1,10 @@ +namespace line.printer + +import std.io.* +import std.* + +fun main(args : Array) { + // Note: \u000A is Unicode representation of linefeed (LF) + val c : Char = 0x000A .chr; + println(c); +} diff --git a/docs/exPuzzlers/src/_03_character/_17_Huh/Ugly.java b/docs/exPuzzlers/src/_03_character/_17_Huh/Ugly.java new file mode 100644 index 00000000000..898bf2a4f3e --- /dev/null +++ b/docs/exPuzzlers/src/_03_character/_17_Huh/Ugly.java @@ -0,0 +1,18 @@ +package _03_character._17_Huh; + +/** + * Bloch, Joshua; Gafter, Neal (2005-06-24). Java™ Puzzlers: Traps, Pitfalls, and Corner Cases (p. 37). Pearson Education (USA). Kindle Edition. + */ + +\u0070\u0075\u0062\u006c\u0069\u0063\u0020\u0020\u0020\u0020 +\u0063\u006c\u0061\u0073\u0073\u0020\u0055\u0067\u006c\u0079 +\u007b\u0070\u0075\u0062\u006c\u0069\u0063\u0020\u0020\u0020 +\u0020\u0020\u0020\u0020\u0073\u0074\u0061\u0074\u0069\u0063 +\u0076\u006f\u0069\u0064\u0020\u006d\u0061\u0069\u006e\u0028 +\u0053\u0074\u0072\u0069\u006e\u0067\u005b\u005d\u0020\u0020 +\u0020\u0020\u0020\u0020\u0061\u0072\u0067\u0073\u0029\u007b +\u0053\u0079\u0073\u0074\u0065\u006d\u002e\u006f\u0075\u0074 +\u002e\u0070\u0072\u0069\u006e\u0074\u006c\u006e\u0028\u0020 +\u0022\u0048\u0065\u006c\u006c\u006f\u0020\u0077\u0022\u002b +\u0022\u006f\u0072\u006c\u0064\u0022\u0029\u003b\u007d\u007d + diff --git a/docs/exPuzzlers/src/_03_character/_17_Huh/Ugly.kt b/docs/exPuzzlers/src/_03_character/_17_Huh/Ugly.kt new file mode 100644 index 00000000000..a34d4848870 --- /dev/null +++ b/docs/exPuzzlers/src/_03_character/_17_Huh/Ugly.kt @@ -0,0 +1 @@ +// You must be kidding \ No newline at end of file diff --git a/docs/exPuzzlers/src/_03_character/_18_String_Cheese/StringCheese.java b/docs/exPuzzlers/src/_03_character/_18_String_Cheese/StringCheese.java new file mode 100644 index 00000000000..f08c802b17c --- /dev/null +++ b/docs/exPuzzlers/src/_03_character/_18_String_Cheese/StringCheese.java @@ -0,0 +1,16 @@ +package _03_character._18_String_Cheese; + +/** + * Bloch, Joshua; Gafter, Neal (2005-06-24). Java™ Puzzlers: Traps, Pitfalls, and Corner Cases (p. 39). Pearson Education (USA). Kindle Edition. + */ +public class StringCheese { + public static void main(String[] args) { + byte[] bytes = new byte[256]; + for (int i = 0; i < 256; i++) + bytes[i] = (byte) i; + String str = new String(bytes); + for (int i = 0, n = str.length(); i < n; i++) + System.out.print((int) str.charAt(i) + " "); + } +} + diff --git a/docs/exPuzzlers/src/_03_character/_20_Whats_My_Class/Me.java b/docs/exPuzzlers/src/_03_character/_20_Whats_My_Class/Me.java new file mode 100644 index 00000000000..80713a9d344 --- /dev/null +++ b/docs/exPuzzlers/src/_03_character/_20_Whats_My_Class/Me.java @@ -0,0 +1,11 @@ +package _03_character._20_Whats_My_Class; + +/** + * Bloch, Joshua; Gafter, Neal (2005-06-24). Java™ Puzzlers: Traps, Pitfalls, and Corner Cases (p. 43). Pearson Education (USA). Kindle Edition. + */ +public class Me { + public static void main(String[] args) { + System.out.println(Me.class.getName().replaceAll(".", "/") + ".class"); + } +} + diff --git a/docs/exPuzzlers/src/_03_character/_20_Whats_My_Class/Me.kt b/docs/exPuzzlers/src/_03_character/_20_Whats_My_Class/Me.kt new file mode 100644 index 00000000000..0462cfba23e --- /dev/null +++ b/docs/exPuzzlers/src/_03_character/_20_Whats_My_Class/Me.kt @@ -0,0 +1,19 @@ +namespace whats.my.`class` + +import std.io.* +import std.* +import std.string.* +import typeinfo.* + +class Me { + fun main() { + (this as Object).getClass()?.getCanonicalName()?.replaceAll(".", "/") + } +} + +fun main(args : Array) { + // Note: \u000A is Unicode representation of linefeed (LF) + val c : Char = 0x000A .chr; + println(c); + println("a\u \u0 \u00 \u000 \u0000 \u0AaA \u0AAz.length( ) + \u0022b") +}