Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
0 / 0 / 0
Регистрация: 25.06.2015
Сообщений: 3
1

Разбиение строки на части, перевод строки в число и перевод числа

28.03.2017, 11:40. Просмотров 2381. Ответов 9
Метки нет (Все метки)

Есть задание:
1. Необходимо реализовать консольное приложение, позволяющее манипулировать строкой, разбив ее на элементы путем использования регулярных выражений.
Определить, является ли строка шестнадцатиричным идентификатором цвета в HTML (формат RGB: #FFFFFF – белый, #000000 – черный, #FF0000 – красный и т.д.). Предусмотреть возможность определить преобладающий цвет палитры RGB в значении. Считать допустимыми в обозначении цвета как заглавные, так и строчные буквы.

И есть код:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package com.company;
import java.util.Scanner;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class Main {
    public static void main(String args[]) {
        System.out.print("Введите 16-тиричный идентификатор цвета: ");
        Scanner scan = new Scanner(System.in);
        String color = scan.nextLine();
        String pattern = "[#{1}([0-9]{1}|[a-f]{1}|[A-F]{1}[0-9]{2}|[af]{2}|[A-F]{2}[0-9]{3}|[a-f]{3}|[A-F]{3}[0-9]{4}|[a-f]{4}|[A-F]{4}[09]{5}|[a-f]{5}|[A-F]{5}[0-9]{6}|[a-f]{6}|[A-F]{6})]{7}";
        Pattern p = Pattern.compile(pattern);
        Matcher m = p.matcher(color);
        System.out.println();
        if(m.matches()){
        System.out.println("Цвет введет верно!");
            
        }
else{
            System.out.print("Ошибка! Неверно введен цвет! Введите идентификатор по примеру: #FFFFFF");
        }
    }
}
Вопрос:
Нужно введенный цвет, например #FFFFFF разбить на части: FF FF FF. Перевести это в число, перевести из 16-тиричного в 10-тичный и сравнить с друг другом.
Что то препод объяснил мутно, хотелось бы узнать как правильно сделать
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.03.2017, 11:40
Ответы с готовыми решениями:

Быстрый перевод части строки в число
Привет всем! Столкнулся с необходимостью быстрого преобразования части строки в число, т.е. нужно...

Перевод строки в число и числа в строку
Здравствуйте, нужен алгоритм перевода числа в строку и обратно или библиотека , хочу написать...

перевод и разбиение строки в массив
имеется l2 : String; s1:array of integer; и переменные строка l2 содержит двоичную запись...

Перевод строки в число и запись числа в регистр
Ввод в строку числа, а программа переводит из строки это число в регистр Использую Tasm, Tlink,...

9
2680 / 2302 / 708
Регистрация: 05.07.2013
Сообщений: 11,183
28.03.2017, 12:03 2
Заходишь в Гугл пишешь string Javadoc, смотришь, какие в классе есть методы, выбираешь подходящие... Profit!
0
2878 / 2290 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
28.03.2017, 12:59 3
Лучший ответ Сообщение было отмечено m0978 как решение

Решение

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
29
30
31
32
33
34
35
36
import java.util.Scanner;
 
public class EasyPalette {
 
    public static void main(String[] args) {
 
        System.out.print("Введите 16-тиричный идентификатор цвета: ");
        Scanner scan = new Scanner(System.in);
        String str = scan.nextLine();
 
        if (isValidHexColor(str)) {
            System.out.println("Доминирующий канал: " + getDominantColorName(str));
            System.out.println("Значение доминирующего канала: " + getDominantColorValue(str));
        } else {
            System.out.println("Цвет введен НЕ верно!");
        }
    }
 
    private static boolean isValidHexColor(String str) {
        return str != null && str.matches("#[0-9A-Fa-f]{6}");
    }
 
    private static String getDominantColorName(String str) {
        int red = Integer.valueOf(str.substring(1, 3), 16);
        int green = Integer.valueOf(str.substring(3, 5), 16);
        int blue = Integer.valueOf(str.substring(5, 7), 16);
        return red > green ? red > blue ? "КРАСНЫЙ" : "СИНИЙ" : "ЗЕЛЕНЫЙ";
    }
 
    private static int getDominantColorValue(String str) {
        int red = Integer.valueOf(str.substring(1, 3), 16);
        int green = Integer.valueOf(str.substring(3, 5), 16);
        int blue = Integer.valueOf(str.substring(5, 7), 16);
        return red > green ? red > blue ? red : blue : green;
    }
}
1
312 / 240 / 103
Регистрация: 14.06.2016
Сообщений: 497
28.03.2017, 14:58 4
Такой вариант
Java
1
2
3
4
5
6
7
8
9
        String color = "#E9EE99";
        if (!color.matches("(?i)#[\\da-f]{6}")) throw new IllegalArgumentException("Неверно введен цвет.");
        System.out.printf("Преобладающий цвет: %s%n", 
                new TreeMap<String, String>(String.CASE_INSENSITIVE_ORDER.reversed()){
                    {
                        String[] COLOR = {"красный", "зеленый", "синий"};
                        for (int i = 0; i < 3; i++) put(color.split("(?i)(?=([\\da-f]{2})+$)")[i + 1], COLOR[i]);
                    }
                }.firstEntry().getValue());
0
2680 / 2302 / 708
Регистрация: 05.07.2013
Сообщений: 11,183
28.03.2017, 15:42 5
Лучший ответ Сообщение было отмечено m0978 как решение

Решение

Цитата Сообщение от Паблито Посмотреть сообщение
return red > green ? red > blue ? "КРАСНЫЙ" : "СИНИЙ" : "ЗЕЛЕНЫЙ";
не правильно же

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
public static void main(String[] args) throws InterruptedException {
        System.out.println(getDominantColor("#FF55CC"));
        System.out.println(getDominantColor("#55FFCC"));
        System.out.println(getDominantColor("#55CCFF"));
        System.out.println(getDominantColor("#FFCCFF"));
 
    }
 
    private static String getDominantColor(String hex) {
        if (isValidHexColor(hex)) {
            int h = Integer.valueOf(hex.substring(1), 16);
            Map<String, Integer> colors = new HashMap<>();
 
            colors.put("r", (h & 0xFF0000) >> 16);
            colors.put("g", (h & 0x00FF00) >> 8);
            colors.put("b", (h & 0x0000FF));
 
            int max = colors.values().stream().mapToInt(Integer::intValue).max().getAsInt();
 
            return colors.entrySet().stream().filter(entry -> entry.getValue() == max).map(entry -> entry.getKey()).collect(Collectors.joining(" "));
        }
        return null;
    }
 
    private static boolean isValidHexColor(String str) {
        return str != null && str.matches("(?i)#[\\da-f]{6}");
    }
2
2878 / 2290 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
28.03.2017, 15:47 6
Цитата Сообщение от xoraxax Посмотреть сообщение
не правильно же
согласен
как насчет?
Java
1
return red >= green ? red >= blue ? "КРАСНЫЙ" : "СИНИЙ" : "ЗЕЛЕНЫЙ";
я тоже могу на ламбдах замутить, но что-то мне подсказывает что это будет палево перед преподом
0
2680 / 2302 / 708
Регистрация: 05.07.2013
Сообщений: 11,183
28.03.2017, 15:51 7
Цитата Сообщение от Паблито Посмотреть сообщение
как насчет?
все равно ж не работает, к тому же не учитывает несколько цветов

Java
1
System.out.println(colors.get("r") >= colors.get("g") ? colors.get("r") >= colors.get("r") ? "КРАСНЫЙ" : "СИНИЙ" : "ЗЕЛЕНЫЙ");
КРАСНЫЙ
r
ЗЕЛЕНЫЙ
g
ЗЕЛЕНЫЙ
b
КРАСНЫЙ
r b
1
2878 / 2290 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
28.03.2017, 15:55 8
так в задании не сказано что надо собирать все каналы с одинаковыми значениями в стринг через пробел
на каких значениях не работает?
0
312 / 240 / 103
Регистрация: 14.06.2016
Сообщений: 497
28.03.2017, 17:03 9
#010203
1
Pablito
28.03.2017, 17:14     Разбиение строки на части, перевод строки в число и перевод числа
  #10

Не по теме:

точно, лажу какую-то я написал, не мой день

0
28.03.2017, 17:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.03.2017, 17:14
Привет! Вот еще темы с ответами:

Заменить в строке все пробелы на перевод строки, а перевод строки изменить на два перевода
Меня интересует следующий вопрос: как заменить в моем стринге все пробелы на переходы на новую...

Перевод из строки в число
Снова я =) Работаю над калькулятором. С функцией ввода разобрался. Значит есть строка ввода....

Перевод строки в число
В программе пользователь вводит строку(день.месяц.год) и надо из этой строки отцепить день,месяц и...

Перевод из строки в число
Каким способом можно перевести строчку типа &quot;System::String ^&quot; в тип double?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.