1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * this work for additional information regarding copyright ownership. 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (the "License"); you may not use this file except in compliance with 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the License. You may obtain a copy of the License at 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License. 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage java.io; 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// BEGIN android-added 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.apache.harmony.luni.util.Msg; 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// ENd android-added 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/** 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * A specialized {@link Writer} that writes characters to a {@code StringBuffer} 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * in a sequential manner, appending them in the process. The result can later 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * be queried using the {@link #StringWriter(int)} or {@link #toString()} 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * methods. 293819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see StringReader 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class StringWriter extends Writer { 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private StringBuffer buf; 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Constructs a new {@code StringWriter} which has a {@link StringBuffer} 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * allocated with the default size of 16 characters. The {@code 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * StringBuffer} is also the {@code lock} used to synchronize access to this 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * writer. 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public StringWriter() { 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project super(); 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf = new StringBuffer(16); 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project lock = buf; 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Constructs a new {@code StringWriter} which has a {@link StringBuffer} 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * allocated with a size of {@code initialSize} characters. The {@code 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * StringBuffer} is also the {@code lock} used to synchronize access to this 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * writer. 533819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param initialSize 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the intial size of the target string buffer. 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public StringWriter(int initialSize) { 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (initialSize < 0) { 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new IllegalArgumentException(); 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf = new StringBuffer(initialSize); 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project lock = buf; 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Calling this method has no effect. In contrast to most {@code Writer} subclasses, 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the other methods in {@code StringWriter} do not throw an {@code IOException} if 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code close()} has been called. 693819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IOException 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if an error occurs while closing this writer. 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void close() throws IOException { 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* empty */ 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Calling this method has no effect. 80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void flush() { 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* empty */ 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Gets a reference to this writer's internal {@link StringBuffer}. Any 88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * changes made to the returned buffer are reflected in this writer. 893819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return a reference to this writer's internal {@code StringBuffer}. 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public StringBuffer getBuffer() { 933819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson return buf; 94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Gets a copy of the contents of this writer as a string. 983819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return this writer's contents as a string. 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public String toString() { 1033819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson return buf.toString(); 104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Writes {@code count} characters starting at {@code offset} in {@code buf} 108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to this writer's {@code StringBuffer}. 1093819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param cbuf 111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the non-null character array to write. 112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param offset 113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the index of the first character in {@code cbuf} to write. 114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param count 115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the maximum number of characters to write. 116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IndexOutOfBoundsException 117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if {@code offset < 0} or {@code count < 0}, or if {@code 118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * offset + count} is greater than the size of {@code buf}. 119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void write(char[] cbuf, int offset, int count) { 122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // avoid int overflow 123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // BEGIN android-changed 124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Exception priorities (in case of multiple errors) differ from 125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // RI, but are spec-compliant. 126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // removed redundant check, added null check, used (offset | count) < 0 127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // instead of (offset < 0) || (count < 0) to safe one operation 128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (cbuf == null) { 129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new NullPointerException(Msg.getString("K0047")); //$NON-NLS-1$ 130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if ((offset | count) < 0 || count > cbuf.length - offset) { 132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new IndexOutOfBoundsException(Msg.getString("K002f")); //$NON-NLS-1$ 133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // END android-changed 1353819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson if (count == 0) { 1363819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson return; 137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1383819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson buf.append(cbuf, offset, count); 139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Writes one character to this writer's {@code StringBuffer}. Only the two 143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * least significant bytes of the integer {@code oneChar} are written. 1443819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param oneChar 146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the character to write to this writer's {@code StringBuffer}. 147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void write(int oneChar) { 1503819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson buf.append((char) oneChar); 151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Writes the characters from the specified string to this writer's {@code 155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * StringBuffer}. 1563819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param str 158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the non-null string containing the characters to write. 159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void write(String str) { 1623819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson buf.append(str); 163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Writes {@code count} characters from {@code str} starting at {@code 167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * offset} to this writer's {@code StringBuffer}. 1683819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param str 170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the non-null string containing the characters to write. 171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param offset 172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the index of the first character in {@code str} to write. 173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param count 174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the number of characters from {@code str} to write. 175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws StringIndexOutOfBoundsException 176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if {@code offset < 0} or {@code count < 0}, or if {@code 177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * offset + count} is greater than the length of {@code str}. 178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void write(String str, int offset, int count) { 181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String sub = str.substring(offset, offset + count); 1823819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson buf.append(sub); 183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Appends the character {@code c} to this writer's {@code StringBuffer}. 187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This method works the same way as {@link #write(int)}. 1883819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param c 190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the character to append to the target stream. 191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return this writer. 192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public StringWriter append(char c) { 195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project write(c); 196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return this; 197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Appends the character sequence {@code csq} to this writer's {@code 201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * StringBuffer}. This method works the same way as {@code 202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * StringWriter.write(csq.toString())}. If {@code csq} is {@code null}, then 203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the string "null" is written to the target stream. 2043819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param csq 206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the character sequence appended to the target. 207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return this writer. 208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public StringWriter append(CharSequence csq) { 211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (null == csq) { 2123819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson write(TOKEN_NULL); 213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 2143819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson write(csq.toString()); 215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return this; 217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Appends a subsequence of the character sequence {@code csq} to this 221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * writer's {@code StringBuffer}. This method works the same way as {@code 222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * StringWriter.writer(csq.subsequence(start, end).toString())}. If {@code 223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * csq} is {@code null}, then the specified subsequence of the string "null" 224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * will be written to the target. 2253819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param csq 227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the character sequence appended to the target. 228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param start 229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the index of the first char in the character sequence appended 230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to the target. 231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param end 232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the index of the character following the last character of the 233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * subsequence appended to the target. 234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return this writer. 235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IndexOutOfBoundsException 236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if {@code start > end}, {@code start < 0}, {@code end < 0} or 237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * either {@code start} or {@code end} are greater or equal than 238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the length of {@code csq}. 239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public StringWriter append(CharSequence csq, int start, int end) { 242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (null == csq) { 243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project csq = TOKEN_NULL; 244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String output = csq.subSequence(start, end).toString(); 246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project write(output, 0, output.length()); 247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return this; 248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 250