Java Strings. Interned Strings. Strings Are Immutable. Variable declaration as String Object. Slide Set 9: Java Strings and Files

Similar documents
Chapter 12 Strings and Characters. Dr. Hikmat Jaber

Chapter 8 Strings. Chapter 8 Strings

Chapter 11 Object-Oriented Design Exception and binary I/O can be covered after Chapter 9

String is one of mostly used Object in Java. And this is the reason why String has unique handling in Java(String Pool). The String class represents

Chapter 9 Strings and Text I/O

Chapter 9 Strings and Text I/O

C08c: A Few Classes in the Java Library (II)

CS5000: Foundations of Programming. Mingon Kang, PhD Computer Science, Kennesaw State University

CS1150 Principles of Computer Science Math Functions, Characters and Strings (Part II)

Mathematical Functions, Characters, and Strings. CSE 114, Computer Science 1 Stony Brook University

Mathematical Functions, Characters, and Strings. CSE 114, Computer Science 1 Stony Brook University

Chapter 4 Mathematical Functions, Characters, and Strings

MATHEMATICAL FUNCTIONS CHARACTERS, AND STRINGS. INTRODUCTION IB DP Computer science Standard Level ICS3U

C17a: Exception and Text File I/O

Thinking in Objects. CSE 114, Computer Science 1 Stony Brook University

Eng. Mohammed Abdualal

CC316: Object Oriented Programming

Assoc. Prof. Marenglen Biba. (C) 2010 Pearson Education, Inc. All rights reserved.

CS 1301 Ch 8, Part A

Assoc. Prof. Marenglen Biba. (C) 2010 Pearson Education, Inc. All rights reserved.

What is a Computer? Chapter 1-9, 12-13, 18, 20, 23 Review Slides

Chapter 1-9, 12-13, 18, 20, 23 Review Slides. What is a Computer?

CHAPTER 4 MATHEMATICAL FUNCTIONS, CHARACTERS, STRINGS

Chapter 12 Exception Handling and Text IO. Liang, Introduction to Java Programming, Tenth Edition, Global Edition. Pearson Education Limited

Motivations. Chapter 12 Exceptions and File Input/Output

Chapter 10 Thinking in Objects. Liang, Introduction to Java Programming, Eleventh Edition, (c) 2018 Pearson Education, Ltd. All rights reserved.

Chapter 10 Thinking in Objects. Liang, Introduction to Java Programming, Tenth Edition, Global Edition. Pearson Education Limited

CS 112 Programming 2. Lecture 08. Exception Handling & Text I/O (1) Chapter 12 Exception Handling and Text IO

Class Library java.lang Package. Bok, Jong Soon

Creating Strings. String Length

String related classes

CST242 Strings and Characters Page 1

Chapter 4. Mathematical Functions, Characters, and Strings

"Hello" " This " + "is String " + "concatenation"

Using Java Classes Fall 2018 Margaret Reid-Miller

Appendix 3. Description: Syntax: Parameters: Return Value: Example: Java - String charat() Method

A variable is a name for a location in memory A variable must be declared

Computational Expression

String. Other languages that implement strings as character arrays

Programming with Java

COMP 202. Built in Libraries and objects. CONTENTS: Introduction to objects Introduction to some basic Java libraries string

Eng. Mohammed Abdualal

The Irving K. Barber School of Arts and Sciences COSC 111 Final Exam Winter Term II Instructor: Dr. Bowen Hui. Tuesday, April 19, 2016

Module 4: Characters, Strings, and Mathematical Functions

USING LIBRARY CLASSES

Exception Handling. CSE 114, Computer Science 1 Stony Brook University

Fundamental Java Syntax Summary Sheet for CISC101, Spring Java is Case - Sensitive!

We now start exploring some key elements of the Java programming language and ways of performing I/O

CS 251 Intermediate Programming Java I/O Streams

Chapter 4 Mathematical Functions, Characters, and Strings

Introduction to Programming Using Java (98-388)

Review Chapters 1 to 4. Instructor: Scott Kristjanson CMPT 125/125 SFU Burnaby, Fall 2013

More non-primitive types Lesson 06

Strings. Strings, which are widely used in Java programming, are a sequence of characters. In the Java programming language, strings are objects.

Lab 14 & 15: String Handling

File I/O Array Basics For-each loop

Java Foundations: Unit 3. Parts of a Java Program

5/24/2006. Last Time. Announcements. Today. Method Overloading. Method Overloading - Cont. Method Overloading - Cont. (Midterm Exam!

Chapter 2 ELEMENTARY PROGRAMMING

STRINGS AND STRINGBUILDERS. Spring 2019

Chapter 2 Primitive Data Types and Operations. Objectives

boolean, char, class, const, double, else, final, float, for, if, import, int, long, new, public, return, static, throws, void, while

Getting started with Java

5/23/2015. Core Java Syllabus. VikRam ShaRma

ing execution. That way, new results can be computed each time the Class The Scanner

Java s String Class. in simplest form, just quoted text. used as parameters to. "This is a string" "So is this" "hi"

Full file at

Project 1. Java Data types and input/output 1/17/2014. Primitive data types (2) Primitive data types in Java

CSE 1223: Introduction to Computer Programming in Java Chapter 7 File I/O

Chapter 2 Elementary Programming


Fundamental Java Syntax Summary Sheet for CISC124, Fall Java is Case - Sensitive!

CSCI 2010 Principles of Computer Science. Data and Expressions 08/09/2013 CSCI

Faculty of Science COMP-202A - Introduction to Computing I (Fall 2008) Final Examination

Exam 1 Prep. Dr. Demetrios Glinos University of Central Florida. COP3330 Object Oriented Programming

CS 1301 Ch 8, Handout 3

Reading Input from Text File

Method OverLoading printf method Arrays Declaring and Using Arrays Arrays of Objects Array as Parameters

More on variables and methods

Starting Out with Java: From Control Structures Through Objects Sixth Edition

Chapter 2: Data and Expressions

Basic computer skills such as using Windows, Internet Explorer, and Microsoft Word. Chapter 1 Introduction to Computers, Programs, and Java

Review. Single Pixel Filters. Spatial Filters. Image Processing Applications. Thresholding Posterize Histogram Equalization Negative Sepia Grayscale

Lecture Set 2: Starting Java

Index COPYRIGHTED MATERIAL

H212 Introduction to Software Systems Honors

c) And last but not least, there are javadoc comments. See Weiss.

CS251L REVIEW Derek Trumbo UNM

Lecture Set 2: Starting Java

Chapter 2: Data and Expressions

Chapter 2: Basic Elements of Java

APPENDIX A: SUMMARY OF IMPORTANT JAVA FEATURES

Primitive Data Types: Intro

Chapter 4: Loops and Files

TEXT-BASED APPLICATIONS

Java Identifiers. Java Language Essentials. Java Keywords. Java Applications have Class. Slide Set 2: Java Essentials. Copyright 2012 R.M.

Classes and Objects Part 1

Introductory Mobile Application Development

2. All the strings gets collected in a special memory are for Strings called " String constant pool".

Welcome to the Using Objects lab!

Transcription:

Java Strings String variables are a Reference DataType Variable contains memory address of the location of string String class is used to create string objects String objects contain a string of characters String sfirstname, slastname; String methods are used access string object instances sfirstname.tolowercase() String operators Concatenation + Assignment = // Changes address not string Copyright 2012 R.M. Laurie 1 Variable declaration as String Object Strings objects are an immutable group of characters Variables can be declared as String objects String sfirstname; String sfirstname = "Robert"; String sfirstname = new String("Robert"); Declaration as string object allows: Concatenation operator + usage sfullname = slastname + ", " + sfirstname; String methods usage int nlength = sentry.length(); // returns string length String supentry = sentry.touppercase(); // returns Upper Case char c1stchar = supentry.charat(0); // returns first character if(supentry.equals("yes")) // compares and returns true or false if(supentry == "YES") // Won't work in Java because string immutable Documentation available in API docs and Chapter 9 http://docs.oracle.com/javase/6/docs/api/java/lang/string.html Copyright 2012 R.M. Laurie 2 Strings Are Immutable A String object is immutable Once created contents of memory cannot be changed Improves processing efficiency Saves memory for repeated strings of characters Java garbage collection deletes String when unreferenced Does the following code change the contents of the string? String scode = "Java"; scode = "HTML"; No, it changes the reference to a new string of characters After executing String s = "Java"; s String object for "Java" Contents cannot be changed s After executing s = "HTML"; String object for "Java" String object for "HTML" This string object is now unreferenced Copyright 2012 R.M. Laurie 3 Interned Strings Java VM can use a unique instance for string literals with the same character sequence created as new string object Such an instance is called interned String s1 = "Welcome to Java"; String s2 = new String("Welcome to Java"); String s3 = "Welcome to Java"; System.out.println("s1 == s2 is " + (s1 == s2)); System.out.println("s1 == s3 is " + (s1 == s3)); display s1 == s2 is false s1 == s3 is true s1 s3 s2 Interned string objec t for "Welcome to Java" A string object for "Welcome to Java" A new object is created if you use the new operator. If you use the string assignment operator, no new object is created if the interned object is already created. Copyright 2012 R.M. Laurie 4 Copyright 2012 R.M. Laurie 1

+equals(s1: Object): boolean +equalsignorecase(s1): boolean +compareto(s1): int +comparetoignorecase(s1): int +regionmatches(toffset: int, s1, offset: int, len: int): boolean +regionmatches(ign orecase: boolean, toffset: int, s1, offset: int, len: int): boolean +startswith(prefix): boolean +endswith(suffix): boolean String Comparisons Returns true if this string is equal to string s1. Returns true if this string is equal to string s1 caseinsensitive. Returns an integer greater than 0, equal to 0, or less than 0 to indicate whether this string is greater than, equal to, or less than s1. Same as compareto except that the comparison is caseinsensitive. Returns true if the specified subregion of this string exactly matches the specified subregion in string s1. Same as the preceding method except that you can specify whether the match is case-sensitive. Returns true if this string starts with the specified prefix. Returns true if this string ends with the specified suffix. String equals Method equals String s1 = new String("Welcome"); String s2 = "welcome"; if (s1.equals(s2)){ // s1 and s2 have the same contents if (s1 == s2) { // s1 and s2 have the same reference Copyright 2012 R.M. Laurie 5 Copyright 2012 R.M. Laurie 6 String compareto() Method compareto(object object) String s1 = new String("Welcome ); String s2 = "welcome"; if (s1.compareto(s2) > 0) { // s1 is greater than s2 else if (s1.compareto(s2) == 0) { // s1 and s2 have the same contents else // s1 is less than s2 Copyright 2012 R.M. Laurie 7 String length, charat, and concat Methods +length(): int +charat(index: int): char +concat(s1) Returns the number of characters in this string. Returns the character at the specified index from this string. Returns a new string that concatenate this string with string s1. Finding string length using the length() method: message = "Welcome"; message.length() // returns 7 String s3 = message.concat(" to Java); message.charat(14) Concatenation operator can also be used ` String s3 = message + " to Java"; Indices 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 message message.charat(0) W e l c o m e t o J a v a message.length() is 15 message.charat(14) Copyright 2012 R.M. Laurie 8 Copyright 2012 R.M. Laurie 2

+substring(beginindex: int) +substring(beginindex: int, endindex: int) Extracting Substrings Returns this string s substring that begins with the character at the specified beginindex and extends to the end of the string Returns this string s substring that begins at the specified beginindex and extends to the character at index endindex 1. Note that the character at endindex is not part of the substring. You can extract a single character from a string using the charat method. You can also extract a substring from a string using the substring method in the String class. String s1 = "Welcome to Java"; String s2 = s1.substring(0, 11) + "HTML"; ` Indices 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 message message.charat(0) W e l c o m e t o J a v a message.length() is 15 message.charat(14) Copyright 2012 R.M. Laurie 9 Converting, Replacing, and Splitting Strings +tolowercase() +touppercase() +trim() +replace(oldchar: char, newchar: char) +replacefirst(oldstring, newstring) +replaceall(oldstring, newstring) +split(delimiter): String[] Returns a new string with all characters converted to lowercase. Returns a new string with all characters converted to uppercase. Returns a new string with blank characters trimmed on both sides. Returns a new string that replaces all matching character in this string with the new character. Returns a new string that replaces the first matching substring in this string with the new substring. Returns a new string that replace all matching substrings in this string with the new substring. Returns an array of strings consisting of the substrings split by the delimiter. "Welcome".toLowerCase() // returns a new string, welcome. " Welcome ".trim() // returns a new string, Welcome. "Welcome".replace('e', 'A') // returns a new string, WAlcomA. "Welcome".replaceFirst("e", "AB") // returns a new string, WABlcome. Copyright 2012 R.M. Laurie 10 Finding Character or Substring in String Formatted String Output +indexof(ch: char): int +indexof(ch: char, fromindex: int): int +indexof(s): int +indexof(s, fromindex: int): int +lastindexof(ch: int): int +lastindexof(ch: int, fromindex: int): int +lastindexof(s): int +lastindexof(s, fromindex: int): int Returns the index of the first occurrence of ch in the string. Returns -1 if not matched. Returns the index of the first occurrence of ch after fromindex in the string. Returns -1 if not matched. Returns the index of the first occurrence of string s in this string. Returns -1 if not matched. Returns the index of the first occurrence of string s in this string after fromindex. Returns -1 if not matched. Returns the index of the last occurrence of ch in the string. Returns -1 if not matched. Returns the index of the last occurrence of ch before fromindex in this string. Returns -1 if not matched. Returns the index of the last occurrence of string s. Returns -1 if not matched. Returns the index of the last occurrence of string s before fromindex. Returns -1 if not matched. "Welcome to Java".indexOf('W') // returns 0. "Welcome to Java".indexOf('x') // returns -1. Integers, floating-point numbers, and Strings appearance can be controlled with String.format() static method The format specifiers for general, character, and numeric types syntax: %[argument_index$][flags][width][.precision]conversion String.format("%n RUN #%d Results for %,d dealt hands", nrun, ncount) String.format("%n %,12d = %s", narykindcounter[nj], sarykind[nj]); Especially useful in printing columns with numbers http://docs.oracle.com/javase/6/docs/api/java/lang/string.html#format(, java.lang.object...) String placeholder [String] % Multiply by 100 and add a % sign "Welcome to Java".indexOf('o', 5) // returns 9. Copyright 2012 R.M. Laurie 11 Copyright 2012 R.M. Laurie 12 Symbol %c %,12d %8.2f %s %n # 0, Description Character place holder [char] Decimal place holder 12 spaces, thousands, [int, long, short] Floating point 8 wide and 2 places right. [double, float] Newline - OS independent Windows file output my need \r\n A digit placeholder; zero shows as absent and not as space A digit placeholder and automatic fill character Grouping placeholder Copyright 2012 R.M. Laurie 3

String.format() method The usual way to assemble strings with variables sdisplay = "Product of " + nnum1 + " x " + nnum2 + " = " + nnum1*nnum2 + "\n"; New style using String format static method similar to printf() sdisplay = String.format("Product of %d x %d = %d%n", nnum1, nnum2, nnum1 * nnum2); 2. public class StringFormat { 3. public static void main(string[] args) { 4. int nnum1 = 6, nnum2 = 9; // Declares int variables 5. String sdisplay; // Declares String variables 6. sdisplay = "Product of " + nnum1 + " x " + nnum2 + " = " 7. + nnum1 * nnum2 + "\n"; // Traditional method 8. sdisplay += String.format("Product of %d x %d = %d%n", 9. nnum1, nnum2, nnum1 * nnum2); 10. sdisplay += String.format("Can be used to fix digits: " 11. + "%3d / %3d = %5.3f%n", nnum1, nnum2, (double)nnum1 / nnum2); 12. JOptionPane.showMessageDialog(null, sdisplay); 13. 14. Copyright 2012 R.M. Laurie 13 java.lang.character +Character(value: char) +charvalue(): char +compareto(anothercharacter: Character): int +equals(anothercharacter: Character): boolean +isdigit(ch: char): boolean +isletter(ch: char): boolean +isletterordigit(ch: char): boolean +islowercase(ch: char): boolean +isuppercase(ch: char): boolean +tolowercase(ch: char): char +touppercase(ch: char): char The Character Class Constructs a character object with char value Returns the char value from this object Compares this character with another Returns true if this character equals to another Returns true if the specified character is a digit Returns true if the specified character is a letter Returns true if the character is a letter or a digit Returns true if the character is a lowercase letter Returns true if the character is an uppercase letter Returns the lowercase of the specified character Returns the uppercase of the specified character Character charobject = new Character('b'); charobject.compareto(new Character('a')); // returns 1 charobject.compareto(new Character('b')); // returns 0 charobject.compareto(new Character('c')); // returns -1 charobject.compareto(new Character('d'); // returns 2 charobject.equals(new Character('b')) ; // returns true charobject.equals(new Character('d')) ; // returns false StringBuilder and StringBuffer StringBuilder Class Methods The StringBuilder and StringBuffer classes Alternative to the String class located in java.lang package In general can be used wherever a string is used Both are more flexible than String String object is fixed once the string is created With both StringBuilder and StringBuffer not fixed Add new contents into string Insert new contents into string Append new contents into string StringBuilder Most efficient for single task access with many appends Not thread safe when concurrent thread access needed StringBuffer Thread safe Allows concurrent access for multiple tasks Almost same methods as StringBuilder Copyright 2012 R.M. Laurie 15 +StringBuilder() Builder +StringBuilder(capacity: int) +StringBuilder(s) +append(data: char[])builder +append(data: char[], offset: int, len: int): StringBuilder +append(v: aprimitivetype)builder +append(s)builder +delete(startindex: int, endindex: int)builder +deletecharat(index: int)builder +insert(index: int, data: char[], offset: int, len: int): StringBuilder +insert(offset: int, data: char[])builder +insert(offset: int, b: aprimitivetype)builder +insert(offset: int, s)builder +replace(startindex: int, endindex: int, s): StringBuilder +reverse()builder +setcharat(index: int, ch: char): void Constructs an empty string builder with capacity 16. Constructs a string builder with the specified capacity. Constructs a string builder with the specified string. Appends a char array into this string builder. Appends a subarray in data into this string builder. Appends a primitive type value as a string to this builder. Appends a string to this string builder. Deletes characters from startindex to endindex. Deletes a character at the specified index. Inserts a subarray of the data in the array to the builder at the specified index. Inserts data into this builder at the position offset. Inserts a value converted to a string into this builder. Inserts a string into this builder at the position offset. Replaces the characters in this builder from startindex to endindex with the specified string. Reverses the characters in the builder. Sets a new character at the specified index in this builder. Copyright 2012 R.M. Laurie 16 Copyright 2012 R.M. Laurie 4

File class The File Class and Text I/O The filename is a string The File class is a wrapper for filename and path File object Encapsulates properties of a file or a path Does not contain methods for reading/writing data from/to file I/O requires creating objects of appropriate I/O class Objects contain methods for reading/writing data from/to a file PrintWriter class to write strings and numeric data to text file Scanner class to read strings and numeric data from text file Writing Data Using PrintWriter java.io.printwriter +PrintWriter(filename) +print(s): void +print(c: char): void +print(carray: char[]): void +print(i: int): void +print(l: long): void +print(f: float): void +print(d: double): void +print(b: boolean): void Also contains the overloaded println methods. Also contains the overloaded printf methods. Creates a PrintWriter for the specified file. Writes a string. Writes a character. Writes an array of character. Writes an int value. Writes a long value. Writes a float value. Writes a double value. Writes a boolean value. A println method acts like a print method; additionally it prints a line separator. The line separator string is defined by the system. It is \r\n on Windows and \n on Unix. The printf method was introduced in 3.6, Formatting Console Output and Strings. Copyright 2012 R.M. Laurie 17 Copyright 2012 R.M. Laurie 18 Saving Data to a new Log File 2. import java.io.*; 3. public class WriteLogFile { 4. public static void main(string[] args) throws Exception 5. { 6. { 7. JFileChooser outfile = new JFileChooser(); 8. outfile.setselectedfile(new File("logFile_YourName.txt")); 9. outfile.setcurrentdirectory(new File(".") /* null is default */); 10. if(outfile.showsavedialog(null) == JFileChooser.APPROVE_OPTION) 11. { 12. File logfile = outfile.getselectedfile(); 13. PrintWriter logoutput = new PrintWriter(logFile); 14. String sentry = JOptionPane.showInputDialog(null, "Enter the Data"); 15. logoutput.println(sentry + " <-- This is what you typed"); 16. logoutput.println("\n4 x 7 = " + 4*7); 17. logoutput.print("my name is: "); 18. logoutput.println("bob Laurie"); 19. logoutput.printf("\npi = %6.3f Rounded\nDone", Math.PI); 20. JOptionPane.showMessageDialog(null, "Done and check file"); 21. logoutput.close(); 22. 23. else 24. System.exit(0); 25. 26. 27. Appending to an existing Log File Using FileWriter 2. import java.io.*; 3. import java.util.*; 4. public class AppendLogFile { 5. public static void main(string[] args) throws Exception 6. { 7. { 8. Date datetoday = new Date(); 9. JFileChooser outfile = new JFileChooser(); 10. outfile.setselectedfile(new File("AppendLogFile_YourName.txt")); 11. outfile.setcurrentdirectory(new File(".") /* null is default */); 12. if(outfile.showsavedialog(null) == JFileChooser.APPROVE_OPTION) 13. { 14. File logfile = outfile.getselectedfile(); 15. FileWriter logoutput = new FileWriter(logFile, true);// Just add true 16. String sentry = JOptionPane.showInputDialog(null, "What is your name"); 17. logoutput.write(sentry + " type this text.\n"); 18. logoutput.write("time Stamp: " + datetoday.tostring() + "\n\n"); 19. JOptionPane.showMessageDialog(null, "Done and check file"); 20. logoutput.close(); 21. 22. else 23. System.exit(0); 24. 25. 26. Bob Laurie type this text. Time Stamp: Sun Apr 29 04:38:28 JST 2012 This is a test of the log file which can be overwritten not appended <-- This is what you typed 4 x 7 = 28 My name is: Bob Laurie Nikola Tesla type this text. PI = 3.142 RoundedDone Copyright 2012 R.M. Laurie 19 Time Stamp: Sun Apr 29 04:41:20 JST 2012 Copyright 2012 R.M. Laurie 20 Copyright 2012 R.M. Laurie 5

Reading Data Using Scanner java.util.scanner +Scanner(source: File) +Scanner(source) +close() +hasnext(): boolean +next() +nextbyte(): byte +nextshort(): short +nextint(): int +nextlong(): long +nextfloat(): float +nextdouble(): double +usedelimiter(pattern): Scanner Creates a Scanner that produces values scanned from the specified file. Creates a Scanner that produces values scanned from the specified string. Closes this scanner. Returns true if this scanner has another token in its input. Returns next token as a string. Returns next token as a byte. Returns next token as a short. Returns next token as an int. Returns next token as a long. Returns next token as a float. Returns next token as a double. Sets this scanner s delimiting pattern. Copyright 2012 R.M. Laurie 21 Scanner Class for Reading Text File 2. import java.io.*; 3. import java.util.*; 4. public class ReadProcessFile { 5. public static void main(string[] args) throws Exception { 6. String sfirstname, slastname, shighfirstname = "", shighlastname = ""; 7. int nscore, ncount = 0, nhighscore = 0, nlowscore = 100; 8. JFileChooser infile = new JFileChooser(); 9. infile.setselectedfile(new File("TestResults.txt")); 10. infile.setcurrentdirectory(new File(".") /* null is default */); 11. if(infile.showopendialog(null) == JFileChooser.APPROVE_OPTION) { 12. File datafile = infile.getselectedfile(); 13. Scanner inputfile = new Scanner(dataFile); 14. while(inputfile.hasnext()) { 15. nscore = inputfile.nextint(); 16. sfirstname = inputfile.next(); 17. slastname = inputfile.next(); 18. if(nscore > nhighscore) { 19. nhighscore = nscore; 20. shighfirstname = sfirstname; 21. shighlastname = slastname; 22. 23. if(nscore < nlowscore) 24. nlowscore = nscore; 25. ncount++; 26. 27. inputfile.close(); 28. 29. else 30. System.exit(0); 31. JOptionPane.showMessageDialog(null, "High Score = " + nhighscore + " by " 32. + shighfirstname + " " + shighlastname + "\nlow Score = " + nlowscore ); 33. 34. 84 Jesse Ventura 72 Dustin Hoffman 100 Robert Laurie 94 Yuri Gregeron 78 David Caradine Text File Write and UTF-8 Line breaks may not show if viewing files in Windows Notepad Instead use windows default newline on file writes "\r\n" Another option is to use String.format("%n Line"); Create new String constant accessing system property for newline final String NL = System.getProperty("line.separator"); When creating Strings use the NL constant within string for newline sbfilewrite.append(nl + " The following hand was dealt:" ); Binary file formatter is best for unicode UTF-8 Best to assemble in a StringBuilder or StringBuffer After string is fully assembled then write to file as binary data Use wrapper OutputStreamWriter for FileOutputStream FileOutputStream has UTF-8 encoding specification Copyright 2012 R.M. Laurie 23 1. File logfile = null; // Reference variable to filename 2. JFileChooser outfile; // Reference variable to file chooser 3. OutputStreamWriter logoutput = null; // Reference to file writer object 4. ------------------------------------------------------------------ 5. outfile = new JFileChooser(); 6. outfile.setselectedfile(new File("PokerLog_YourName.txt")); 7. outfile.setcurrentdirectory(new File(".") /* null is default */); 8. if(outfile.showsavedialog(null) == JFileChooser.APPROVE_OPTION) 9. { 10. logfile = outfile.getselectedfile(); 11. logoutput = new OutputStreamWriter( 12. new FileOutputStream(logFile),"UTF-8"); 13. 14. else 15. System.exit(0); 16. ------------------------------------------------------------------- 17. JOptionPane.showMessageDialog(null, sbdisplay); 18. if(blogfile) 19. logoutput.write(sbfilewrite + "\n"); // Write to file 20. 21. JOptionPane.showMessageDialog(null, 22. "Please check file log for results:\n" + logfile); 23. if(blogfile) 24. logoutput.close(); // Close log file 25. Copyright 2012 R.M. Laurie 6