如何通过跳过换行符将文本区域内容替换为“*”
How can text area contents can be replaced to "*" by skipping the new line character
我有一个要求,我需要在 运行 进入 jtextArea 时将所有文本替换为“”(基本上是屏蔽)。意思是说我将密钥存储到 textArea 的变量中,显示为“”。
得到的代码如下:
public class App {
String text= "";
App(){
JFrame f= new JFrame();
// final JTextArea area=new JTextArea();
JTextArea jTextArea=new JTextArea();
jTextArea.addKeyListener(new KeyListener() {
public void keyTyped(KeyEvent e) {
}
public void keyPressed(KeyEvent e) {
}
public void keyReleased(KeyEvent e) {
if(Character.isLetter(e.getKeyChar())) {
System.out.println(text);
//text = text + e.getKeyChar();
text += String.valueOf(e.getKeyChar());
System.out.println(text);
jTextArea.setText(text.replaceAll("[a-z]", "*"));
}
//System.out.println(text);
}
});
System.out.println(text);
jTextArea.setBounds(10,30, 200,200);
jTextArea.setAutoscrolls(true);
f.add(jTextArea);
f.setSize(300,300);
f.setLayout(null);
f.setVisible(true);
}
public static void main(String args[])
{
new App();
}
}
这里的问题是它也转换了我的 "New line" 并将其添加到第一行本身。
我的要求是:
输入:
Hello
how
are
you
应显示为:
*****
***
***
***
请指教
您的错误是您没有将换行符附加到 text
变量,这意味着 text
将始终包含字母,但不会包含换行符。由于您将文本字段的文本设置为 text
,因此 text
也应该具有这些换行符。
您应该只删除 if 语句,因为 "done" 正则表达式 [a-z]
在 replaceAll
调用中已经进行了检查。
public void keyReleased(KeyEvent e) {
text += String.valueOf(e.getKeyChar());
jTextArea.setText(text.replaceAll("[a-z]", "*"));
}
然而,这仍然不能处理退格和粘贴之类的东西,更不用说如果 text
是 StringBuilder
会更好。但我会留给你来改进你的代码。
如果这正是您要查找的内容,请检查以下代码
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class App {
String text= "";
App(){
JFrame f= new JFrame();
// final JTextArea area=new JTextArea();
JTextArea jTextArea=new JTextArea();
jTextArea.addKeyListener(new KeyListener() {
public void keyTyped(KeyEvent e) {
}
public void keyPressed(KeyEvent e) {
}
public void keyReleased(KeyEvent e) {
text += String.valueOf(e.getKeyChar());
System.out.println(text);
jTextArea.setText(text.replaceAll("[a-z]", "*"));
}
});
System.out.println(text);
jTextArea.setBounds(10,30, 200,200);
jTextArea.setAutoscrolls(true);
f.add(jTextArea);
f.setSize(300,300);
f.setLayout(null);
f.setVisible(true);
}
public static void main(String args[])
{
new App();
}
}
由于其他两个答案都存在仅替换字母输入的问题,因此忽略了所有数字、特殊字符或空格,我想我也应该补充一下。如果您实际上只想将任何字符替换为星号,您甚至不必使用 RegEx 和替换字符,您不妨在每次调用 keyReleased
事件时添加一个星号。
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class App
{
String displayText = "";
String valueText = "";
App()
{
JFrame f = new JFrame();
// final JTextArea area=new JTextArea();
JTextArea jTextArea = new JTextArea();
jTextArea.addKeyListener(new KeyListener()
{
public void keyTyped(KeyEvent e)
{
}
public void keyPressed(KeyEvent e)
{
}
public void keyReleased(KeyEvent e)
{
if(e.getKeyCode() != KeyEvent.VK_ENTER)
{
displayText += "*";
valueText += String.valueOf(e.getKeyChar());
jTextArea.setText(displayText);
}
}
});
System.out.println(valueText);
jTextArea.setBounds(10, 30, 200, 200);
jTextArea.setAutoscrolls(true);
f.add(jTextArea);
f.setSize(300, 300);
f.setLayout(null);
f.setVisible(true);
}
public static void main(String args[])
{
new App();
}
}
如果你想在后台保留输入的值,只需要将输入的值保存在某个地方,只显示text
。
这是按预期工作的完整代码:
import javax.swing.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class App {
//String text= "";
String text = "";
App(){
JFrame f= new JFrame();
// final JTextArea area=new JTextArea();
JTextArea jTextArea=new JTextArea();
jTextArea.addKeyListener(new KeyListener() {
public void keyTyped(KeyEvent e) {
}
public void keyPressed(KeyEvent e) {
}
public void keyReleased(KeyEvent e) {
char ch = e.getKeyChar();
if (e.getExtendedKeyCode() == KeyEvent.VK_BACK_SPACE) {
//System.out.println("It Works Backspace pressed..!");
}
else {
text += String.valueOf(ch);
}
//System.out.println(e.getKeyChar());
jTextArea.setText(text.replaceAll(".", "*"));
//jTextArea.setText(text.replaceAll(".[\b]", "*"));
//jTextArea.setText(text.toString().replaceAll("[\b].", "*"));
}
});
System.out.println(text);
jTextArea.setBounds(10,30, 200,200);
jTextArea.setAutoscrolls(true);
f.add(jTextArea);
f.setSize(300,300);
f.setLayout(null);
f.setVisible(true);
}
public static void main(String args[])
{
new App();
}
}
我有一个要求,我需要在 运行 进入 jtextArea 时将所有文本替换为“”(基本上是屏蔽)。意思是说我将密钥存储到 textArea 的变量中,显示为“”。 得到的代码如下:
public class App {
String text= "";
App(){
JFrame f= new JFrame();
// final JTextArea area=new JTextArea();
JTextArea jTextArea=new JTextArea();
jTextArea.addKeyListener(new KeyListener() {
public void keyTyped(KeyEvent e) {
}
public void keyPressed(KeyEvent e) {
}
public void keyReleased(KeyEvent e) {
if(Character.isLetter(e.getKeyChar())) {
System.out.println(text);
//text = text + e.getKeyChar();
text += String.valueOf(e.getKeyChar());
System.out.println(text);
jTextArea.setText(text.replaceAll("[a-z]", "*"));
}
//System.out.println(text);
}
});
System.out.println(text);
jTextArea.setBounds(10,30, 200,200);
jTextArea.setAutoscrolls(true);
f.add(jTextArea);
f.setSize(300,300);
f.setLayout(null);
f.setVisible(true);
}
public static void main(String args[])
{
new App();
}
}
这里的问题是它也转换了我的 "New line" 并将其添加到第一行本身。
我的要求是:
输入:
Hello
how
are
you
应显示为:
*****
***
***
***
请指教
您的错误是您没有将换行符附加到 text
变量,这意味着 text
将始终包含字母,但不会包含换行符。由于您将文本字段的文本设置为 text
,因此 text
也应该具有这些换行符。
您应该只删除 if 语句,因为 "done" 正则表达式 [a-z]
在 replaceAll
调用中已经进行了检查。
public void keyReleased(KeyEvent e) {
text += String.valueOf(e.getKeyChar());
jTextArea.setText(text.replaceAll("[a-z]", "*"));
}
然而,这仍然不能处理退格和粘贴之类的东西,更不用说如果 text
是 StringBuilder
会更好。但我会留给你来改进你的代码。
如果这正是您要查找的内容,请检查以下代码
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class App {
String text= "";
App(){
JFrame f= new JFrame();
// final JTextArea area=new JTextArea();
JTextArea jTextArea=new JTextArea();
jTextArea.addKeyListener(new KeyListener() {
public void keyTyped(KeyEvent e) {
}
public void keyPressed(KeyEvent e) {
}
public void keyReleased(KeyEvent e) {
text += String.valueOf(e.getKeyChar());
System.out.println(text);
jTextArea.setText(text.replaceAll("[a-z]", "*"));
}
});
System.out.println(text);
jTextArea.setBounds(10,30, 200,200);
jTextArea.setAutoscrolls(true);
f.add(jTextArea);
f.setSize(300,300);
f.setLayout(null);
f.setVisible(true);
}
public static void main(String args[])
{
new App();
}
}
由于其他两个答案都存在仅替换字母输入的问题,因此忽略了所有数字、特殊字符或空格,我想我也应该补充一下。如果您实际上只想将任何字符替换为星号,您甚至不必使用 RegEx 和替换字符,您不妨在每次调用 keyReleased
事件时添加一个星号。
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class App
{
String displayText = "";
String valueText = "";
App()
{
JFrame f = new JFrame();
// final JTextArea area=new JTextArea();
JTextArea jTextArea = new JTextArea();
jTextArea.addKeyListener(new KeyListener()
{
public void keyTyped(KeyEvent e)
{
}
public void keyPressed(KeyEvent e)
{
}
public void keyReleased(KeyEvent e)
{
if(e.getKeyCode() != KeyEvent.VK_ENTER)
{
displayText += "*";
valueText += String.valueOf(e.getKeyChar());
jTextArea.setText(displayText);
}
}
});
System.out.println(valueText);
jTextArea.setBounds(10, 30, 200, 200);
jTextArea.setAutoscrolls(true);
f.add(jTextArea);
f.setSize(300, 300);
f.setLayout(null);
f.setVisible(true);
}
public static void main(String args[])
{
new App();
}
}
如果你想在后台保留输入的值,只需要将输入的值保存在某个地方,只显示text
。
这是按预期工作的完整代码:
import javax.swing.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class App {
//String text= "";
String text = "";
App(){
JFrame f= new JFrame();
// final JTextArea area=new JTextArea();
JTextArea jTextArea=new JTextArea();
jTextArea.addKeyListener(new KeyListener() {
public void keyTyped(KeyEvent e) {
}
public void keyPressed(KeyEvent e) {
}
public void keyReleased(KeyEvent e) {
char ch = e.getKeyChar();
if (e.getExtendedKeyCode() == KeyEvent.VK_BACK_SPACE) {
//System.out.println("It Works Backspace pressed..!");
}
else {
text += String.valueOf(ch);
}
//System.out.println(e.getKeyChar());
jTextArea.setText(text.replaceAll(".", "*"));
//jTextArea.setText(text.replaceAll(".[\b]", "*"));
//jTextArea.setText(text.toString().replaceAll("[\b].", "*"));
}
});
System.out.println(text);
jTextArea.setBounds(10,30, 200,200);
jTextArea.setAutoscrolls(true);
f.add(jTextArea);
f.setSize(300,300);
f.setLayout(null);
f.setVisible(true);
}
public static void main(String args[])
{
new App();
}
}