Monthly Archives: Май 2014

Сделать в слове первую букву заглавной (Java)

Для того чтобы сделать первую букву в слове заглавной, напишем собственную функцию firstUpperCase. Функция firstUpperCase будет принимать слово, а возвращать тоже слово, но с первой заглавной буквой.
public String firstUpperCase(String word){
	if(word == null || word.isEmpty()) return "";//или return word;
	return word.substring(0, 1).toUpperCase() + word.substring(1);
}
word.substring(0, 1) - возвращает первую букву в слове word.substring(0, 1).toUpperCase() - переводит первую букву в верхний регистр word.substring(1) - добавляет остальные символы без изменения Пример использования:
String var = "name";
System.out.println("get" + firstUpperCase(var) + "()");//Выведет: "getName()"

FastScanner — ускоряем чтение данных

Стандартный класс Scanner из пакета java.util очень хорош для чтения небольшого кол-ва данных, но если кол-во данных большое и скорость чтения критична, то нужно самостоятельно реализовать более быстрый сканер. Ниже приведен пример такого сканера.
import java.io.*;
import java.util.StringTokenizer;

public class FastScanner {
	BufferedReader br;
	StringTokenizer st;
	
	public FastScanner(){
		init();
	}
	
	public FastScanner(String name) {
		init(name);
	}
	
	public FastScanner(boolean isOnlineJudge){
		if(!isOnlineJudge || System.getProperty("ONLINE_JUDGE") != null){
			init();
		}else{	
			init("input.txt");			
		}
	}
	
	private void init(){
		br = new BufferedReader(new InputStreamReader(System.in));
	}
	
	private void init(String name){
		try {
			br = new BufferedReader(new FileReader(name));
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}
	
	public String nextToken(){
		while(st == null || !st.hasMoreElements()){
			try {
				st = new StringTokenizer(br.readLine());
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return st.nextToken();
	}
	
	public int nextInt(){
		return Integer.parseInt(nextToken());
	}
	
	public long nextLong(){
		return Long.parseLong(nextToken());
	}
	
	public double nextDouble(){
		return Double.parseDouble(nextToken());
	}
	
}
Примеры использования Объявление FastScanner'а для чтения из консоли:
FastScanner scan = new FastScanner();
Объявление FastScanner'а для чтения из указанного файла:
FastScanner scan = new FastScanner("A.in");
Объявление FastScanner'а для чтения из консоли или из файла input.txt в зависимости от установленного свойства ONLINE_JUDGE
FastScanner scan = new FastScanner(true);
Чтение данных:
int i = scan.nextInt();
long l = scan.nextLong();
double d = scan.nextDouble();
String token = scan.nextToken();
Быстрый вывод в консоль Наряду с быстрым чтением входных данных, также важен быстрый вывод данных в консоль. Для ускорения вывода будем не сразу выводить данные в консоль с помощью System.out, а с помощью PrintWriter будем накапливать, и лишь потом сбрасывать данные в консоль командой flush (что эффективнее). Сбрасывать данные лучше порциями среднего размера, чтобы соблюсти баланс между скорость и потребляемой памятью.
PrintWriter out = new PrintWriter(System.out);
out.println(result);
out.flush();
Сравним вывод одинаковых данных через обычный System.out и через PrintWriter. Код ниже у меня отработал примерно за 2 секунды:
for (int i = 0; i < 1000; i++) {
    for (int j = 0; j < 1000; j++) {
        System.out.println(i * j);
    }
}
А следующий код с буферизацией отработал существенно быстрее, за менее чем 0,7 секунды:
PrintWriter out = new PrintWriter(System.out);
for (int i = 0; i < 1000; i++) {
    for (int j = 0; j < 1000; j++) {
        out.println(i * j);
    }
    out.flush();
}

Заготовка HTML-страницы

Заготовка HTML-страницы с указание кодировки UTF-8, подключенным файлом стилей и скриптом:




Заголовок		




	

	

Команды для изучения нового Linux-сервера

Очень часто требуется настроить сервер, который вы видите в первые, а настраивали его до вас. С Windows-серверами проблем мало, а вот с Linux-серверами настройка может затянуться, если вы не знаете необходимых команд. Ниже будет приведен список самых необходимых команд.
  1. Узнать какой перед нами Linux и его версия
    cat /etc/issue
    
  2. Просмотреть историю последних выполненных команд
    history
    
  3. Узнать кол-во свободного места в файловой системе
    df -h
    
    Опция -h показывает данные в килобайтах, мегабайтах и гигабайтах
  4. Возможно, в системе имеются неразмеченные разделы, которые вам не видны. Следующая команды выведет полный список разделов жестких дисков
    fdisk -l
    
  5. Вывести информацию о состоянии всех активных сетевых интерфейсах:
    ifconfig
    
  6. Перезагрузка сервера
    reboot
    
  7. Выключить сервер
    shutdown -h 0
    
  8. Распаковка tar-архива сжатого gzip'ом
    tar xvfz archive.tar.gz
    
  9. Распаковка tar-архива сжатого bzip'ом
    tar xvfj archive.tar.bz2
    
  10. Перемещение файла (директории)
    mv from_file to_file
    

Unable to execute dex: java.nio.BufferOverflowException

Снова при запуске импортированного приложения повторилась следующая ошибка:
[2014-05-09 23:36:21 - Dex Loader] Unable to execute dex: java.nio.BufferOverflowException. 
Check the Eclipse log for stack trace.
[2014-05-09 23:36:21 - HelloJni] Conversion to Dalvik format failed: 
Unable to execute dex: java.nio.BufferOverflowException. 
Check the Eclipse log for stack trace.
И снова решение проблемы плохо гуглиться: в основном предлагают откатить или обновить версию SDK. После гугления вспомнил, как решается проблема. Нужно чтобы целевая версия SDK совпадала в манифесте приложения (AndroidManifest.xml) и в свойствах проекта (project.properties) Например, в представленных ниже фрагментах указана 19-я версия SDK. AndroidManifest.xml:

project.properties:
# Project target.
target=android-19