Основные данные не предназначены для сохранения больших двоичных файлов, таких как изображения. Вместо этого используйте Document Directory в файловой системе.
Вот пример кода для этого.
let documentsDirectory = NSSearchPathForDirectoriesInDomains(.DocumentDirectory,.UserDomainMask, true).first as! String
// self.fileName is whatever the filename that you need to append to base directory here.
let path = documentsDirectory.stringByAppendingPathComponent(self.fileName)
let success = data.writeToFile(path, atomically: true)
if !success { // handle error }
Вы хотите сделать строку из них?
String s = new StringBuilder().append(char1).append(char2).append(char3).toString();
Примечание, что
String b = "b";
String s = "a" + b + "c";
На самом деле компиляции к
String s = new StringBuilder("a").append(b).append("c").toString();
Редактирование : как litb указанный, можно также сделать это:
"" + char1 + char2 + char3;
, Который компилирует в следующее:
new StringBuilder().append("").append(c).append(c1).append(c2).toString();
Редактирование (2) : Исправленная строка добавляет сравнение с тех пор, как cletus указывает, серия строк обрабатывается компилятором.
цель вышеупомянутого состоит в том, чтобы проиллюстрировать то, что компилятор делает, чтобы не сказать Вам, что необходимо сделать.
Я не собирался отвечать на этот вопрос, но существует два ответа здесь (которые становятся проголосовавшими!), которые являются просто неправильными. Рассмотрите эти выражения:
String a = "a" + "b" + "c";
String b = System.getProperty("blah") + "b";
первое оценено в [1 117] время компиляции . Второе оценено в [1 118] время выполнения .
Так никогда не заменяют постоянные конкатенации (никакого типа) с StringBuilder, StringBuffer и т.п. Только используйте их, где переменные включены и обычно только когда Вы добавляете много операндов, или Вы добавляете в цикле.
, Если символы являются постоянными, это прекрасно:
String s = "" + 'a' + 'b' + 'c';
, Если однако они не, рассмотрите это:
String concat(char... chars) {
if (chars.length == 0) {
return "";
}
StringBuilder s = new StringBuilder(chars.length);
for (char c : chars) {
s.append(c);
}
return s.toString();
}
как соответствующее решение.
Однако некоторые могли бы испытать желание оптимизировать:
String s = "Name: '" + name + "'"; // String name;
в это:
String s = new StringBuilder().append("Name: ").append(name).append("'").toString();
, В то время как это полно благих намерений, нижняя строка , не ДЕЛАЮТ .
, Почему? Как другой ответ, на который правильно указывают: компилятор делает это для Вас. Таким образом в выполнении его самостоятельно, Вы не позволяете компилятору оптимизировать код или не зависите, если это - хорошая идея, код более трудно прочитать и его излишне сложный.
Для оптимизации низкого уровня компилятор лучше в оптимизации кода, чем Вы.
Позволяют компилятору сделать свое задание. В этом случае худший вариант развития событий - то, что компилятор неявно изменяет Ваш код на точно, что Вы написали. Конкатенация 2-3 Строк могла бы быть более эффективной, чем построение StringBuilder, таким образом, могло бы быть лучше оставить его, как. Компилятор знает то, что является лучшим в этом отношении.
Если Вы имеете набор символов и хотите к concat их в строку, почему бы не
System.out.println("" + char1 + char2 + char3);
?
Можно использовать конструктор String .
System.out.println(new String(new char[]{a,b,c}));
Необходимо сказать компилятору, что Вы хотите сделать Конкатенацию строк путем запуска последовательности со строки, даже пустой. Как так:
System.out.println("" + char1 + char2 + char3...);
Вам нужен Строковый объект некоторого описания содержать Ваш массив связанных символов, начиная с эти char
, тип будет содержать только отдельный символ. например,
StringBuilder sb = new StringBuilder('a').append('b').append('c');
System.out.println(sb.toString);
инициалы открытого класса {
public static void main (String [] args) {
char initialA = 'M';
char initialB = 'P';
char initialC = 'T';
System.out.println("" + initialA + initialB + initialC );
}
}