powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / выкинуть символы с конца строки
8 сообщений из 8, страница 1 из 1
выкинуть символы с конца строки
    #39404553
Mari.P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дано: поле в таблице Excel, куда пользователь ввел что попало, например
Код: java
1.
100 ,8 /с


Задача - вытянуть число типа Double.
Подскажите пожалуйста, уважаемые профессионалы, так можно сделать, или глупость написала?
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
                                TmpStr2=cell.getStringCellValue();
      	                       	TmpStr=new String(TmpStr2.replaceAll(" ", "" )); // убираем пробелы
      	                    	TmpStr3=new String(TmpStr.replaceAll(",", "." )); // убираем запятые
      	                    	CellValue=TmpStr3;
      	                    	Pattern pattern = Pattern.compile("((-|\\+)?[0-9]+(\\.[0-9]+)?)+", Pattern.CASE_INSENSITIVE);
                                // если только цифры
      	                    	if (Pattern.matches("((-|\\+)?[0-9]+(\\.[0-9]+)?)+", TmpStr3)==true)
      	                    	{	
      	                    		DoubleCellValue=Double.parseDouble(TmpStr2)*CurKoef;
      	                    	}// если только цифры
      	                    	else
      	                    	{
      	                    	 
          	                  	  Pos=0;
      	                    	  for(i=0;i<CellValue.length();i++)
      	                    	  {	  TmpStr=CellValue.substring(i,i+1);
      	                    	     if (Pattern.matches("((-|\\+)?[0-9]+(\\.[0-9]+)?)+", TmpStr)==true || TmpStr.compareTo(".") == 0)continue;
      	                    	     else {Pos=i;break;}
      	                    	  }
      	                    	 
      	                    	  if(Pos!=0) // выкидываем хвост из символов
      	                    		  {  TmpStr=CellValue.substring(0,Pos);
      	                    		     DoubleCellValue=Double.parseDouble(TmpStr)*CurKoef;
      	                    		  }
      	                    	  else DoubleCellValue=(double)0; // в этой строке цифр нет вообще
      	                    	
      	                    		  
      	                    	}// end else
...
Рейтинг: 0 / 0
выкинуть символы с конца строки
    #39404556
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mari.PДано: поле в таблице Excel, куда пользователь ввел что попало, например
Код: java
1.
100 ,8 /с

какие еще входные данные? нужны все варианты
...
Рейтинг: 0 / 0
выкинуть символы с конца строки
    #39404559
Mari.P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usman,

на сегодня варианты такие, что им завтра в голову придет, кто знает....
7,0/с
0,4/с
6,0/ч
44/с
2,6/с
15,0/с
8,0/с
2/2с
1,5/ч
17/ч


11,44/с
19,0/с
4,0/с
1,0/с
0,5/с
104/с
33/с
59,0/с
4,0/с
0
55/с

131/ч
8,4/ч
17,0/с
1,0/с
2,5/ч
8,0/с
477/с
1,0/с
194/с
8,0/с
3,0/с
4,0/с

2,0/с
418с
34,78/с
6,0/ч

6,0/ч
20/с
68/с
45,0/с
1,0/с
80/с
4,0/с
4,0/с
29/с
7,0/с
5,0/с
0,1/с
161/98
21
35/ч
2,0/с
133,7/ч
...
Рейтинг: 0 / 0
выкинуть символы с конца строки
    #39404560
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mari.P,

ок

Код: java
1.
System.out.println( "100 ,8 /с".replaceAll("(\\d+)\\s*([\\,\\.]*)\\s*(\\d+).*?$", "$1$2$3") );
...
Рейтинг: 0 / 0
выкинуть символы с конца строки
    #39404564
Mari.P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usman,

Спасибо большое, попробую.
...
Рейтинг: 0 / 0
выкинуть символы с конца строки
    #39404595
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Долго же вы с этим экселем боретесь :))
Если это была разовая операция, то можно было бы просто прямо в экселе создать пачку запросов типа insert, через конкатенацию или по-русски "сцепить", автозаменой и другими функциями экселя почистить некорректные данные, скопировать получившиеся итоги и вставить как значения в соседний столбец, проверить все данные визуально в том же notepad++ или sublim'е, там есть подсветка синтаксиса.
Была у меня подобная задача залить 10000+ старых клиентов и 20000+ старых заявок в новую базу. На все про все уходит часа 3 работы.
Но если у вас подобное периодически возникает, тогда, конечно, стоит через апач или что-то другое заливать.
...
Рейтинг: 0 / 0
выкинуть символы с конца строки
    #39404790
Mari.P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NixicДолго же вы с этим экселем боретесь :))
Если это была разовая операция, то можно было бы просто прямо в экселе создать пачку запросов типа insert, .
Как это сделать, если макросы запрещены?

То, что я хотела, я уже сделала, сейчас просто унифицирую, (туплю и не понимаю регулярных выражений).
Формы Excel будут спускаться сверху с завидной регулярностью,
и аналитика им нужна будет всегда. В Excel, когда листы разбросаны по всему
компьютеру ее не сделать.
...
Рейтинг: 0 / 0
выкинуть символы с конца строки
    #39405318
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не имею с ними ничего общего. Но этот код слишком сложный, я не стал разбираться. Можно гораздо проще - без регулярных выражений и с ними.
1) Без регулярных выражений.
Вам надо отбросить всё, что после '/'. Для этого можно использовать String.indexOf () или String.lastIndexOf()
Код: java
1.
2.
3.
4.
String s = "100 ,8 /с";
int pos = s.indexOf("/");
if (pos >=0)
    s = s.substring (0, pos);


Результат: "100, 8 "

Или можно применить String.split для разбиения строки на несколько частей, хотя обычно это имеет смысл, когда все части нужны:
Код: java
1.
2.
3.
s = "123/45";
String [] parts = s.split("/");
System.out.println(parts[0]);


Результат: "123"

Аргумент в split вообще-то регулярное выражение, хотя в данном примере это не видно. Вот как мы могли бы превратить полное ФИО в ФИО с инициалами с помощью этой функции и регуляного выражения "(\\s)+" (оно выбирает группу пробельных символов):
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
public class Test {

	public static void main(String[] args) {
		String fio = "Косой Заяц Кроликович ";
		String shortFio = getShortFio(fio);
		System.out.println(shortFio);
	}

	static String getShortFio(String fio) {
		String[] parts = fio.trim().split("(\\s)+", 3);
		StringBuffer shortFio = new StringBuffer("");

		shortFio.append(parts[0]);

		if (parts.length > 1) {
			if (parts[1].length() > 0)
				shortFio.append(" ").append(parts[1].substring(0, 1)).append(".");
		}
		if (parts.length > 2) {
			if (parts[2].length() > 0)
				shortFio.append(parts[2].substring(0, 1)).append(".");
		}

		return shortFio.toString();
	}
}


Результат: "Косой Заяц Кроликович" -> "Косой З.К."

2) С регулярным выражением. Их можно придумать много. Но я заметил, что в примерах единственное важное данное в клетке - действительное число. Значит, можно использовать регулярное выражение, убирающее все символы, которые не могут входить в число. Пример:
Код: java
1.
2.
3.
String s = "+12, 5/c";
String s2 = s.replaceAll("[^\\d\\+\\-\\.\\,]", "");
System.out.println(s2);    


Результат: строка "+12,5"

Здесь регулярное выражение выбирает символы в [], ^ означает "выбрать все, кроме указанных", далее указываются: \d - цифры (можно заменить на 0-9), далее символы +-., (\ перед ними потому что некоторые из них являются специальными символами в регулярных выражениях, а нам нужны они как таковые. Поскольку \ внутри Java-строки, то заменяется на \\:

Код: java
1.
2.
	String s = "+12, 5/c";
	String s2 = s.replaceAll("[^\\d\\+\\-\\.\\,]", "");   


Результат: "12,5"

Если подумать, то экранирование символов в этом примере всё же излишнее, сгодилось бы и s.replaceAll("[^\\d+-.,]", "")

Итак, у на есть строка "12,5". Хотим превратить её в число. Для этого заменяем "," на ".";
Код: java
1.
2.
3.
4.
5.
6.
7.
String s = "12.5";
Double d = 0.0d; //какое-нибудь значение по умолчанию на случай если в строке не число
try {
    d = Double.valueOf(s.replace(",", ".");
} catch (NumberFormatExecption nfe) {
// что-нибудь делаем для реакции на исключение или ничего не делаем
}


Результат: число 12,5.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / выкинуть символы с конца строки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]