ASCII アートをデータベースに保存する必要があるアプリを作成しています。以下の形式で文字列を保存します。
"____________\n |---------|-O\n/___________\\n|______________|\n\____________/"
データを取得してラベルに表示するときに、改行文字とバックスラッシュを解析して、ASCII アートの実際の形状を表示したいと考えています。
この種の文字列を解析するにはどうすればよいですか?
ASCII アートをデータベースに保存する必要があるアプリを作成しています。以下の形式で文字列を保存します。
"____________\n |---------|-O\n/___________\\n|______________|\n\____________/"
データを取得してラベルに表示するときに、改行文字とバックスラッシュを解析して、ASCII アートの実際の形状を表示したいと考えています。
この種の文字列を解析するにはどうすればよいですか?
NSString には、リテラル \n を改行文字 (\n として記号化されます) に置き換えることで、必要なことを行うメソッドがあります。C 形式の文字列では、ダブル スラッシュを使用して、2 番目のスラッシュがエスケープ記号ではなく実際のスラッシュであることをライブラリに知らせることができます。したがって、データを sqlite から NSString にロードできたと仮定すると、これは機能するはずです。
newString = [yourStringFromSQLite stringByReplacingOccurrencesOfString:@"\\n" withString:@"\n"];
新しい行を作成するためだけに \n を使用している場合は、代わりに、データベースに値を挿入するときにスペースを保持し、ラベルに次のプロパティを設定します ->
1) 最初の単語に合わせて幅を保持します。2) linebreakmode を wordwrap にします (幅が使用できないため、次の単語を新しい行に折り返します)
3) no を設定します。行数から 0 まで
これが役に立てば幸いです。
スキャナーを使用してhtmlエンティティを削除してみてください
- (NSString *)flattenHTML:(NSString *)html trimWhiteSpace:(BOOL)trim {
NSScanner *theScanner;
NSString *text = nil;
theScanner = [NSScanner scannerWithString:html];
while ([theScanner isAtEnd] == NO) {
[theScanner scanUpToString:@"<" intoString:NULL] ;
[theScanner scanUpToString:@">" intoString:&text] ;
html = [html stringByReplacingOccurrencesOfString:[ NSString stringWithFormat:@"%@>", text] withString:@" "];
}
return trim ? [html stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] : html;
}
トリミングされた文字列を表示する必要がある場合は、このメソッドを呼び出します