/*
* Copyright (C) 2012 Yang Chuan
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.cocoa4android.ns;
import org.cocoa4android.util.sbjson.SBJsonParser;
public class NSString extends NSObject {
protected String content = null;
public static NSString stringWithJavaString(String string){
return new NSString(string);
}
private NSString(){
this.content = "";
}
private NSString(String string){
this.content = string;
}
private NSString(String string,Object ...args){
this.content = String.format(string, args);
}
public static NSString string(){
return new NSString();
}
//stringWithFormat
public static String stringWithFormat(String format,Object ...args){
return String.format(format, args);
}
//stringByAppendingFormat
public String stringByAppendingFormat(String string,String format,Object ...args){
return string+String.format(format, args);
}
//stringByAppendingString
public String stringByAppendingString(String string){
return this.content+string;
}
//ContentsOfFile
// public static NSString stringWithContentsOfFile(String string) {
// return new NSString(string);
// }
//subStringFromIndex
public String subStringFromIndex(int start){
return this.content.substring(start);
}
//subStringFromIndexToIndex
public String subStringToIndex(int end) {
int start = 0;
return this.content.substring(start, end) ;
}
//length
public int length(){
return this.content.length();
}
//getString
public String getString() {
return this.content;
}
//setString
public void setString (String string) {
this.content = string;
}
//isEqualToString
public boolean isEqualToString (NSString string){
return this.content.equals(string.getString());
}
//characterAtIndex
public char characterAtIndex(int index) {
return this.content.charAt(index);
}
//substringWithRange
public String substringWithRange(NSRange range) {
return this.content.substring(range.start, range.end);
}
//�ַ���ȡ�ַ���
public NSArray componentsSeparatedByString (String string) {
String c[] = this.content.split(string);
NSArray array = NSArray.arrayWithObjects((Object[])c);
return array;
}
//stringByReplacingCharactersInRange
public String stringByReplacingCharactersInRange (NSRange range,String string) {
int length =this.length();
String stringBegin = this.content.substring(0,range.start);
String stringEnd = this.content.substring(range.end+1,length);
return stringBegin+string+stringEnd;
}
//pathExtension (ok)
public String pathExtension () {
String string = "";
//�ж��ַ������Ƿ��� �� ����1û�У�
if (this.content.lastIndexOf(".")>0) {
int length = this.content.length();
int index = this.content.lastIndexOf(".");
string = this.content.substring(index+1, length);
}
/*
// NSArray array = this.componentsSeparatedByString("\\.");
// String string = "";
// System.out.print(array.count());
// int i = 0;
// if (array.count()>1) {
// i = array.count()-1;
// if(!array.objectAtIndex(i).equals("") && !array.objectAtIndex(i).equals("/")){
// String sub="/";
// if (array.objectAtIndex(i).toString().length()!=0 && i-1>0) {
// sub = array.objectAtIndex(i).toString().substring(0, 1);
// }
// if (!sub.equals("/")) {
// string = (String)array.objectAtIndex(i);
// }
// }
// }
*/
return string;
}
//lastPathComponent (ok)
public String lastPathComponent () {
// NSArray array = this.componentsSeparatedByString("/");
// String string = "/";
// for (int i =0; i<array.count(); i++) {
// if (!array.objectAtIndex(i).equals("")) {
// string =(String) array.objectAtIndex(i);
// }
// }
int start = -1,end = -1;
for (int i = content.length()-1; i >= 0; i--) {
if (end == -1) {
if (content.charAt(i) != '/') {
end = i;
}
}
else {
if (content.charAt(i) == '/') {
start = i;
break;
}
}
}
if (end == -1) {
return "/";
}
return content.substring(start + 1, end +1);
// return new NSString(string);
}
//pathComponents (you hua)
public NSArray pathComponents() {
// NSArray array = this.componentsSeparatedByString("/");
NSMutableArray pathArray = NSMutableArray.array();
String string ;
// for (int i =0; i<array.count(); i++) {
// if (array.objectAtIndex(i).equals("")) {
// if (i==0 || i==array.count()-1) {
// pathArray.add(string);
// }
// }else {
// string =(String) array.objectAtIndex(i);
// pathArray.add(string);
// }
// }
// return pathArray;
int start = 0,end = 0 ;
for (int i = 0; i < content.length(); i++) {
if (content.charAt(i)=='/' || i==length()-1) {
end = i;
string= content.substring(start,end+1);
if (string.equals("/")) {
if (start==0 || end==content.length()-1) {
pathArray.addObject('/');
}
}else {
pathArray.addObject(string);
}
start = i+1;
}
}
System.out.print(pathArray.count());
return pathArray;
}
//stringByAppendingPathComponent (ok)
public String stringByAppendingPathComponent(String string) {
String receive=this.getString();
if (receive.equals("")) {
return string;
}else {
int index = this.content.length();
int c = this.content.lastIndexOf("/");
if (c==index-1) {
receive = this.content+string;
}else {
receive = this.content+"/"+string;
}
return receive;
}
}
//int,float,double,bool value
public int intValue() {
return Integer.parseInt(this.content);
}
public Float float1Value() {
return Float.parseFloat(this.content);
}
public Double doubleValue() {
return Double.parseDouble(this.content);
}
public boolean boolValue() {
return Integer.parseInt(this.content)!=0;
}
//toString
public String toString() {
return this.getString();
}
/**
* Returns the NSDictionary or NSArray represented by the receiver's JSON representation, or nil on error
* @return
*/
public Object JSONValue(){
return SBJsonParser.objectWithString(this.getString());
}
public class NSStringEncoding{
public static final int NSASCIIStringEncoding = 1; /* 0..127 only */
public static final int NSNEXTSTEPStringEncoding = 2;
public static final int NSJapaneseEUCStringEncoding = 3;
public static final int NSUTF8StringEncoding = 4;
public static final int NSISOLatin1StringEncoding = 5;
public static final int NSSymbolStringEncoding = 6;
public static final int NSNonLossyASCIIStringEncoding = 7;
public static final int NSShiftJISStringEncoding = 8; /* kCFStringEncodingDOSJapanese */
public static final int NSISOLatin2StringEncoding = 9;
public static final int NSUnicodeStringEncoding = 10;
public static final int NSWindowsCP1251StringEncoding = 11; /* Cyrillic; same as AdobeStandardCyrillic */
public static final int NSWindowsCP1252StringEncoding = 12; /* WinLatin1 */
public static final int NSWindowsCP1253StringEncoding = 13; /* Greek */
public static final int NSWindowsCP1254StringEncoding = 14; /* Turkish */
public static final int NSWindowsCP1250StringEncoding = 15; /* WinLatin2 */
public static final int NSISO2022JPStringEncoding = 21; /* ISO 2022 Japanese encoding for e-mail */
public static final int NSMacOSRomanStringEncoding = 30;
public static final int NSUTF16StringEncoding = NSUnicodeStringEncoding; /* An alias for NSUnicodeStringEncoding */
public static final int NSUTF16BigEndianStringEncoding = 0x90000100; /* NSUTF16StringEncoding encoding with explicit endianness specified */
public static final int NSUTF16LittleEndianStringEncoding = 0x94000100; /* NSUTF16StringEncoding encoding with explicit endianness specified */
public static final int NSUTF32StringEncoding = 0x8c000100;
public static final int NSUTF32BigEndianStringEncoding = 0x98000100; /* NSUTF32StringEncoding encoding with explicit endianness specified */
public static final int NSUTF32LittleEndianStringEncoding = 0x9c000100; /* NSUTF32StringEncoding encoding with explicit endianness specified */
}
}