Проблема сравнения переменных переменных в java [duplicate]

Правильный ответ:

select table_record_id,
group_concat(if(value_name='note', value_text, NULL)) as note
,group_concat(if(value_name='hire_date', value_text, NULL)) as hire_date
,group_concat(if(value_name='termination_date', value_text, NULL)) as termination_date
,group_concat(if(value_name='department', value_text, NULL)) as department
,group_concat(if(value_name='reporting_to', value_text, NULL)) as reporting_to
,group_concat(if(value_name='shift_start_time', value_text, NULL)) as shift_start_time
,group_concat(if(value_name='shift_end_time', value_text, NULL)) as shift_end_time
from other_value
where table_name = 'employee'
and is_active = 'y'
and is_deleted = 'n'
GROUP BY table_record_id
97
задан Radiodef 6 April 2015 в 00:54
поделиться

19 ответов

Вы можете взять первый символ из Scanner.next:

char c = reader.next().charAt(0);

Чтобы потреблять ровно один символ, который вы могли бы использовать:

char c = reader.findInLine(".").charAt(0);

Чтобы использовать строго один символ, который вы могли бы использовать:

char c = reader.next(".").charAt(0);
138
ответ дан Reimeus 21 August 2018 в 09:47
поделиться
  • 1
  • 2
    На самом деле он принимает более одного персонажа, но действует только на первого персонажа – Ralph 19 December 2012 в 04:39
  • 3
    @ user1804697 для использования только символов используйте char c = reader.next("[a-zA-Z]").charAt(0); – Reimeus 15 April 2014 в 22:10
  • 4
    В чем разница между «точно»? и "строго" в данном контексте? – tilper 29 November 2017 в 19:02
  • 5
    @Reimeus, что именно представляет собой значение в копировании, вставляя код, а затем запуская его? – bharal 7 June 2018 в 17:37

Вы должны получить String с помощью scanner.next () и вызвать метод String.charAt (0) в возвращаемой строке. Пример:

    import java.util.Scanner;

    public class InputC{


            public static void main(String[] args) {
                // TODO Auto-generated method stub
                   // Declare the object and initialize with
                   // predefined standard input object
                    Scanner scanner = new Scanner(System.in);
                    System.out.println("Enter a character: ");
                    // Character input
                    char c = scanner.next().charAt(0);
                    // Print the read value
                    System.out.println("You have entered: "+c);
            }


        }
Выход

Enter a character: 
a
You have entered: a
0
ответ дан AbdoCosmos 21 August 2018 в 09:47
поделиться
Scanner key = new Scanner(System.in);
//shortcut way 
char firstChar=key.next().charAt(0);  
//how it works;
/*key.next() takes a String as input then,
charAt method is applied on that input (String)
with a parameter of type int (position) that you give to get      
that char at that position.
You can simply read it out as: 
the char at position/index 0 from the input String
(through the Scanner object key) is stored in var. firstChar (type char) */

//you can also do it in a bit elabortive manner to understand how it exactly works
String input=key.next();  // you can also write key.nextLine to take a String with spaces also
char firstChar=input.charAt(0);
char charAtAnyPos= input.charAt(pos);  // in pos you enter that index from where you want to get the char from

Кстати, вы не можете взять char непосредственно в качестве входа. Как вы можете видеть выше, сначала берется строка, затем charAt (0); найден и сохранен

-1
ответ дан Arafe Zawad Sajid 21 August 2018 в 09:47
поделиться

Вы можете использовать typecasting:

Scanner sc= new Scanner(System.in);
char a=(char) sc.next();

Таким образом, вы берете ввод в String из-за функции «next ()», но затем он будет преобразован в символ из-за упомянутого символа «char» в скобках.

Этот метод преобразования типа данных путем указания типа данных назначения в скобках называется typecating. Это работает для меня, я надеюсь, что это работает для u:)

-2
ответ дан aribeiro 21 August 2018 в 09:47
поделиться
package Pack;

import java.util.Scanner;

public class test { 
    public static void main(String[] args) {

        Scanner reader = new Scanner(System.in);
        char c = reader.next(".").charAt(0);

    }
}

Чтобы получить только один символ char c = reader.next ("."). charAt (0);

0
ответ дан Assafs 21 August 2018 в 09:47
поделиться
  • 1
    Чтобы получить только один символ char c = reader.next (& quot;. "). CharAt (0); – Rakesh Kumar B 16 October 2017 в 13:52

Лучший способ ввода ввода в класс Scanner:

Scanner sca=new Scanner(System.in);
System.out.println("enter a character");
char ch=sca.next().charAt(0);
2
ответ дан Ben 21 August 2018 в 09:47
поделиться

Это фактически не работает:

char c = reader.next().charAt(0);

В этом вопросе есть несколько хороших объяснений и ссылок: Почему класс Scanner не имеет метода nextChar? «Сканер разбивает свой вход на токены, используя шаблон разделителя», который довольно открыт. Например, при использовании этого

c = lineScanner.next().charAt(0);

для этой строки ввода "(1 + 9) / (3 - 1) + 6 - 2" вызов следующего возврата "(1", c будет установите значение '(', и вы потеряете «1» при следующем вызове next ()

Обычно, когда вы хотите получить персонажа, вы хотели бы игнорировать пробелы. Это сработало для me:

c = lineScanner.findInLine("[^\\s]").charAt(0);

Ссылка: regex соответствует одному символу, который является чем угодно, кроме пробела

3
ответ дан Community 21 August 2018 в 09:47
поделиться

Попробуйте

Scanner scanner=new Scanner(System.in);
String s=scanner.next();
char c=s.charAt(0);
-1
ответ дан Farhan 21 August 2018 в 09:47
поделиться

Попробуйте это: char c = S.nextLine (). charAt (0);

-1
ответ дан Harshal Mande 21 August 2018 в 09:47
поделиться
import java.util.Scanner;

public class userInput{
    public static void main(String[] args){
        // Creating your scanner with name kb as for keyBoard
        Scanner kb = new Scanner(System.in);

        String name;
        int age;
        char bloodGroup;
        float height;

        // Accepting Inputs from user
        System.out.println("Enter Your Name");
        name = kb.nextLine(); // for entire line of String including spaces
        System.out.println("Enter Your Age");
        age = kb.nextInt(); // for taking Int
        System.out.println("Enter Your BloodGroup : A/B/O only");
        bloodGroup  = kb.next().charAt(0); // For character at position 0
        System.out.println("Enter Your Height in Meters");
        height = kb.nextFloat(); // for taking Float value

        // closing your scanner object
        kb.close();

        // Outputting All
        System.out.println("Name : " +name);
        System.out.println("Age : " +age);
        System.out.println("BloodGroup : " +bloodGroup);
        System.out.println("Height : " +height+" m");

    }
}
1
ответ дан HellPreacher 21 August 2018 в 09:47
поделиться

Самый простой способ - сначала сменить переменную на String и принять ввод как строку. Затем вы можете управлять на основе входной переменной с инструкцией if-else или switch следующим образом.

Scanner reader = new Scanner(System.in);

String c = reader.nextLine();
switch (c) {
    case "a":
        <your code here>
        break;
    case "b":
        <your code here>
        break;
    default: 
        <your code here>
}
45
ответ дан hoat4 21 August 2018 в 09:47
поделиться
// Use a BufferedReader to read characters from the console.
import java.io.*;
class BRRead {
public static void main(String args[]) throws IOException
{
char c;
BufferedReader br = new
BufferedReader(new InputStreamReader(System.in));
System.out.println("Enter characters, 'q' to quit.");
// read characters
do {
c = (char) br.read();
System.out.println(c);
} while(c != 'q');
}
}
0
ответ дан John Born 21 August 2018 в 09:47
поделиться

Чтобы найти индекс символа в заданном укусе, вы можете использовать этот код:

package stringmethodindexof;

import java.util.Scanner;
import javax.swing.JOptionPane;

/**
 *
 * @author ASUS//VERY VERY IMPORTANT
 */
public class StringMethodIndexOf {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        String email;
        String any;
        //char any;

//any=JOptionPane.showInputDialog(null,"Enter any character or string to find out its INDEX NUMBER").charAt(0);       
//THE AVOBE LINE IS FOR CHARACTER INPUT LOL
//System.out.println("Enter any character or string to find out its INDEX NUMBER");
       //Scanner r=new Scanner(System.in);
      // any=r.nextChar();
        email = JOptionPane.showInputDialog(null,"Enter any string or anything you want:");
         any=JOptionPane.showInputDialog(null,"Enter any character or string to find out its INDEX NUMBER");
        int result;
        result=email.indexOf(any);
        JOptionPane.showMessageDialog(null, result);

    }

}
-3
ответ дан Laurel 21 August 2018 в 09:47
поделиться

Вы должны использовать свой пользовательский считыватель ввода для получения более быстрых результатов, а не для извлечения первого символа из чтения строки. Ссылка для Custom ScanReader и объяснение: https://gist.github.com/nik1010/5a90fa43399c539bb817069a14c3c5a8

Код для сканирования Char:

BufferedInputStream br=new BufferedInputStream(System.in);
char a= (char)br.read();
1
ответ дан NIKUNJ KHOKHAR 21 August 2018 в 09:47
поделиться
  • 1
    Вы должны добавить код из сути в свой ответ, поскольку он может быть недоступен некоторое время. – Markus 16 June 2017 в 06:20
  • 2
    @Markus добавлен для сканирования символов. – NIKUNJ KHOKHAR 16 June 2017 в 06:24

Просто используйте ...

Scanner keyboard = new Scanner(System.in);<br>
char c = keyboard.next().charAt(0);

Вот и все ...

-1
ответ дан noufalcep 21 August 2018 в 09:47
поделиться
import java.io.*;

class abc // enter class name (here abc is class name)
{
    public static void main(String arg[])
    throws IOException // can also use Exception
    {
        BufferedReader z =
            new BufferedReader(new InputStreamReader(System.in));

        char ch = (char) z.read();
    } // PSVM
} // class
16
ответ дан Radiodef 21 August 2018 в 09:47
поделиться

Существует три способа решения этой проблемы:

  • Вызвать next() на сканере и извлечь первый символ строки (например, charAt(0)). Если вы хотите прочитать остальную часть строки в качестве символов, итерацию по оставшимся символам в строке. Другие ответы имеют этот код.
  • Используйте setDelimiter(""), чтобы установить разделитель в пустую строку. Это заставит next() tokenize в строки, которые имеют ровно один символ. Итак, вы можете повторно вызывать next().charAt(0) для повторения символов. Затем вы можете установить разделитель в исходное значение и возобновить сканирование обычным способом!
  • Использовать API-интерфейс Reader вместо API-интерфейса сканера. Метод Reader.read() обеспечивает чтение одного символа из входного потока. Например:
    Reader reader = new InputStreamReader(System.in);
    int ch = reader.read();
    if (ch != -1) {  // check for EOF
        // we have a character ...
    }
    

Когда вы читаете с консоли через System.in, вход обычно буферизуется операционной системой и только «освобождается» от приложения, когда пользователь вводит ENTER. Поэтому, если вы намереваетесь, чтобы ваше приложение реагировало на отдельные штрихи клавиатуры, это не сработает. Вам нужно будет сделать некоторые собственные материалы для кода, специфичные для ОС, чтобы отключить или работать с буферизацией строк для консоли на уровне ОС.

Ссылка:

8
ответ дан Stephen C 21 August 2018 в 09:47
поделиться
  • 1
    Пожалуйста, не могли бы вы привести пример того, что вы сказали – Ralph 19 December 2012 в 02:14
45
ответ дан hoat4 1 November 2018 в 04:07
поделиться
16
ответ дан Radiodef 1 November 2018 в 04:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: