程序目的是要求找出对应的缺失括号,并标出位置例如:(1+2-[+{那么缺失括号为(,[,{
位置分别为1,6,8我做的程序可以在1--10个字符中查找,但如果10个以上就会有错误,而且根本理不出头绪,下面是我尝试查找10个以上字符但失败的程序,希望大家能帮帮我,我是自学的,还不到一个月,如果有低级错误大家别笑,第一次来这,再次感谢大家帮忙!!!
//java.ioを呼び出し
import java.io.*;//クラス"goal2"を設定する
public class Catch
{ //異常値をスローします
public static void main(String[] args)throws IOException
{
//文字列を設定
String mystring;
//括弧のタイプ、「(」は1である一方、「)」は2です。
int K=1|3|5;
int i;
//文字列の入力ストリーム
StringBuffer dummy=new StringBuffer();
BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));
System.out.println("対象を入力して下さい:");
mystring=buf.readLine();
for( i=0;i<mystring.length();i++)
{
if('('==mystring.charAt(i)|'{'==mystring.charAt(i)|'['==mystring.charAt(i))
{
if ('('==mystring.charAt(i))
{
K=1;
//括弧のタイプをdummyに入れます
dummy.append(String.valueOf(K));
//posをdummyに入れます
dummy.append(String.valueOf(i+1));
}
else if('{'==mystring.charAt(i))
{
K=3;
//括弧のタイプをdummyに入れます
dummy.append(String.valueOf(K));
//posをdummyに入れます
dummy.append(String.valueOf(i+1));
}
else if('['==mystring.charAt(i))
{
K=5;
//括弧のタイプをdummyに入れます
dummy.append(String.valueOf(K));
//posをdummyに入れます
dummy.append(String.valueOf(i+1));
}
}
else if(')'==mystring.charAt(i)||'}'==mystring.charAt(i)||']'==mystring.charAt(i))
{
if (mystring.length()<10)
{
if(')'==mystring.charAt(i))
{
if(0!=dummy.length())
{
if (dummy.charAt(dummy.length()-2)=='1')
{
//dummyの末から削除します
dummy.delete(dummy.length()-2,dummy.length());
}
else if(dummy.charAt(dummy.length()-2)=='3')
{
System.out.println("対応の「(」が見つかなかった"+"posは"+(i+1)+"です。");
}
else
System.out.println("対応の「(」が見つかなかった"+"posは"+(i+1)+"です。");
}
else
System.out.println("対応の「(」が見つかなかった"+"posは"+(i+1)+"です。");//dummyに入れずに、出力します
}
if('}'==mystring.charAt(i))
{
if(0!=dummy.length())
{
if (dummy.charAt(dummy.length()-2)=='3')
{
//dummyの末から削除します
dummy.delete(dummy.length()-2,dummy.length());
}
else if(dummy.charAt(dummy.length()-2)=='5')
{
System.out.println("対応の「{」が見つかなかった"+"posは"+(i+1)+"です。");
}
else
System.out.println("対応の「{」が見つかなかった"+"posは"+(i+1)+"です。");
}
else
System.out.println("対応の「{」が見つかなかった"+"posは"+(i+1)+"です。");
}
if(']'==mystring.charAt(i))
{
if(0!=dummy.length())
{
if (dummy.charAt(dummy.length()-2)=='5')
{
//dummyの末から削除します
dummy.delete(dummy.length()-2,dummy.length());
}
else if(dummy.charAt(dummy.length()-2)=='1')
{
System.out.println("対応の「[」が見つかなかった"+"posは"+(i+1)+"です。");
}
else
System.out.println("対応の「[」が見つかなかった"+"posは"+(i+1)+"です。");
}
else
System.out.println("対応の「[」が見つかなかった"+"posは"+(i+1)+"です。");
}
}
else if (mystring.length()>=10)
{ if(')'==mystring.charAt(i))
{
if(0!=dummy.length())
{
if (dummy.charAt(dummy.length()-2)=='1')
{
//dummyの末から削除します
dummy.delete(dummy.length()-2,dummy.length());
}
else if(dummy.charAt(dummy.length()-2)=='3')
{
System.out.println("対応の「(」が見つかなかった"+"posは"+(i+1)+"です。");
}
else
System.out.println("対応の「(」が見つかなかった"+"posは"+(i+1)+"です。");
}
else
System.out.println("対応の「(」が見つかなかった"+"posは"+(i+1)+"です。");//dummyに入れずに、出力します
}
if('}'==mystring.charAt(i))
{
if(0!=dummy.length())
{
if (dummy.charAt(dummy.length()-2)=='3')
{
//dummyの末から削除します
dummy.delete(dummy.length()-2,dummy.length());
}
else if(dummy.charAt(dummy.length()-2)=='5')
{
System.out.println("対応の「{」が見つかなかった"+"posは"+(i+1)+"です。");
}
else
System.out.println("対応の「{」が見つかなかった"+"posは"+(i+1)+"です。");
}
else
System.out.println("対応の「{」が見つかなかった"+"posは"+(i+1)+"です。");
}
if(']'==mystring.charAt(i))
{
if(0!=dummy.length())
{
if (dummy.charAt(dummy.length()-2)=='5')
{
//dummyの末から削除します
dummy.delete(dummy.length()-2,dummy.length());
}
else if(dummy.charAt(dummy.length()-2)=='1')
{
System.out.println("対応の「[」が見つかなかった"+"posは"+(i+1)+"です。");
}
else
System.out.println("対応の「[」が見つかなかった"+"posは"+(i+1)+"です。");
}
else
System.out.println("対応の「[」が見つかなかった"+"posは"+(i+1)+"です。");
}
}
}
}while(dummy.length()!=0)
{
if (dummy.charAt(dummy.length()-2)=='1')
{
System.out.println("対応の「)」が見つかなかった"+"posは"+dummy.charAt(dummy.length()-1)+"です");
dummy.delete(dummy.length()-2,dummy.length());
}
else if (dummy.charAt(dummy.length()-2)=='3')
{
System.out.println("対応の「}」が見つかなかった"+"posは"+dummy.charAt(dummy.length()-1)+"です");
dummy.delete(dummy.length()-2,dummy.length());
}
else if (dummy.charAt(dummy.length()-2)=='5')
{
System.out.println("対応の「]」が見つかなかった"+"posは"+dummy.charAt(dummy.length()-1)+"です");
dummy.delete(dummy.length()-2,dummy.length());
}
}
}
}
位置分别为1,6,8我做的程序可以在1--10个字符中查找,但如果10个以上就会有错误,而且根本理不出头绪,下面是我尝试查找10个以上字符但失败的程序,希望大家能帮帮我,我是自学的,还不到一个月,如果有低级错误大家别笑,第一次来这,再次感谢大家帮忙!!!
//java.ioを呼び出し
import java.io.*;//クラス"goal2"を設定する
public class Catch
{ //異常値をスローします
public static void main(String[] args)throws IOException
{
//文字列を設定
String mystring;
//括弧のタイプ、「(」は1である一方、「)」は2です。
int K=1|3|5;
int i;
//文字列の入力ストリーム
StringBuffer dummy=new StringBuffer();
BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));
System.out.println("対象を入力して下さい:");
mystring=buf.readLine();
for( i=0;i<mystring.length();i++)
{
if('('==mystring.charAt(i)|'{'==mystring.charAt(i)|'['==mystring.charAt(i))
{
if ('('==mystring.charAt(i))
{
K=1;
//括弧のタイプをdummyに入れます
dummy.append(String.valueOf(K));
//posをdummyに入れます
dummy.append(String.valueOf(i+1));
}
else if('{'==mystring.charAt(i))
{
K=3;
//括弧のタイプをdummyに入れます
dummy.append(String.valueOf(K));
//posをdummyに入れます
dummy.append(String.valueOf(i+1));
}
else if('['==mystring.charAt(i))
{
K=5;
//括弧のタイプをdummyに入れます
dummy.append(String.valueOf(K));
//posをdummyに入れます
dummy.append(String.valueOf(i+1));
}
}
else if(')'==mystring.charAt(i)||'}'==mystring.charAt(i)||']'==mystring.charAt(i))
{
if (mystring.length()<10)
{
if(')'==mystring.charAt(i))
{
if(0!=dummy.length())
{
if (dummy.charAt(dummy.length()-2)=='1')
{
//dummyの末から削除します
dummy.delete(dummy.length()-2,dummy.length());
}
else if(dummy.charAt(dummy.length()-2)=='3')
{
System.out.println("対応の「(」が見つかなかった"+"posは"+(i+1)+"です。");
}
else
System.out.println("対応の「(」が見つかなかった"+"posは"+(i+1)+"です。");
}
else
System.out.println("対応の「(」が見つかなかった"+"posは"+(i+1)+"です。");//dummyに入れずに、出力します
}
if('}'==mystring.charAt(i))
{
if(0!=dummy.length())
{
if (dummy.charAt(dummy.length()-2)=='3')
{
//dummyの末から削除します
dummy.delete(dummy.length()-2,dummy.length());
}
else if(dummy.charAt(dummy.length()-2)=='5')
{
System.out.println("対応の「{」が見つかなかった"+"posは"+(i+1)+"です。");
}
else
System.out.println("対応の「{」が見つかなかった"+"posは"+(i+1)+"です。");
}
else
System.out.println("対応の「{」が見つかなかった"+"posは"+(i+1)+"です。");
}
if(']'==mystring.charAt(i))
{
if(0!=dummy.length())
{
if (dummy.charAt(dummy.length()-2)=='5')
{
//dummyの末から削除します
dummy.delete(dummy.length()-2,dummy.length());
}
else if(dummy.charAt(dummy.length()-2)=='1')
{
System.out.println("対応の「[」が見つかなかった"+"posは"+(i+1)+"です。");
}
else
System.out.println("対応の「[」が見つかなかった"+"posは"+(i+1)+"です。");
}
else
System.out.println("対応の「[」が見つかなかった"+"posは"+(i+1)+"です。");
}
}
else if (mystring.length()>=10)
{ if(')'==mystring.charAt(i))
{
if(0!=dummy.length())
{
if (dummy.charAt(dummy.length()-2)=='1')
{
//dummyの末から削除します
dummy.delete(dummy.length()-2,dummy.length());
}
else if(dummy.charAt(dummy.length()-2)=='3')
{
System.out.println("対応の「(」が見つかなかった"+"posは"+(i+1)+"です。");
}
else
System.out.println("対応の「(」が見つかなかった"+"posは"+(i+1)+"です。");
}
else
System.out.println("対応の「(」が見つかなかった"+"posは"+(i+1)+"です。");//dummyに入れずに、出力します
}
if('}'==mystring.charAt(i))
{
if(0!=dummy.length())
{
if (dummy.charAt(dummy.length()-2)=='3')
{
//dummyの末から削除します
dummy.delete(dummy.length()-2,dummy.length());
}
else if(dummy.charAt(dummy.length()-2)=='5')
{
System.out.println("対応の「{」が見つかなかった"+"posは"+(i+1)+"です。");
}
else
System.out.println("対応の「{」が見つかなかった"+"posは"+(i+1)+"です。");
}
else
System.out.println("対応の「{」が見つかなかった"+"posは"+(i+1)+"です。");
}
if(']'==mystring.charAt(i))
{
if(0!=dummy.length())
{
if (dummy.charAt(dummy.length()-2)=='5')
{
//dummyの末から削除します
dummy.delete(dummy.length()-2,dummy.length());
}
else if(dummy.charAt(dummy.length()-2)=='1')
{
System.out.println("対応の「[」が見つかなかった"+"posは"+(i+1)+"です。");
}
else
System.out.println("対応の「[」が見つかなかった"+"posは"+(i+1)+"です。");
}
else
System.out.println("対応の「[」が見つかなかった"+"posは"+(i+1)+"です。");
}
}
}
}while(dummy.length()!=0)
{
if (dummy.charAt(dummy.length()-2)=='1')
{
System.out.println("対応の「)」が見つかなかった"+"posは"+dummy.charAt(dummy.length()-1)+"です");
dummy.delete(dummy.length()-2,dummy.length());
}
else if (dummy.charAt(dummy.length()-2)=='3')
{
System.out.println("対応の「}」が見つかなかった"+"posは"+dummy.charAt(dummy.length()-1)+"です");
dummy.delete(dummy.length()-2,dummy.length());
}
else if (dummy.charAt(dummy.length()-2)=='5')
{
System.out.println("対応の「]」が見つかなかった"+"posは"+dummy.charAt(dummy.length()-1)+"です");
dummy.delete(dummy.length()-2,dummy.length());
}
}
}
}
import java.io.*;
public class Catch
{ //throw the error
public static void main(String[] args)throws IOException
{
String mystring;
//1is "(",2is"{",3is"["
int K=1|3|5;
int i;
//input words
StringBuffer dummy=new StringBuffer();
BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));
System.out.println("please input a string");
mystring=buf.readLine();
for( i=0;i<mystring.length();i++)
{
if('('==mystring.charAt(i)|'{'==mystring.charAt(i)|'['==mystring.charAt(i))
{
if ('('==mystring.charAt(i))
{
K=1;
//get the type into dummy
dummy.append(String.valueOf(K));
//get the pos into dummy
dummy.append(String.valueOf(i+1));
}
else if('{'==mystring.charAt(i))
{
K=3;
dummy.append(String.valueOf(K));
dummy.append(String.valueOf(i+1));
}
else if('['==mystring.charAt(i))
{
K=5;
dummy.append(String.valueOf(K));
dummy.append(String.valueOf(i+1));
}
}
else if(')'==mystring.charAt(i)||'}'==mystring.charAt(i)||']'==mystring.charAt(i))
{
if(')'==mystring.charAt(i))
{
if(0!=dummy.length())
{
if (dummy.charAt(dummy.length()-2)=='1')
{
//delete what have inputed
dummy.delete(dummy.length()-2,dummy.length());
}
else if(dummy.charAt(dummy.length()-2)=='3')
{
System.out.println("「(」can not found"+"pos is"+(i+1));
}
else
System.out.println("「(」can not found"+"pos is"+(i+1));
}
else
System.out.println("「(」can not found"+"pos is"+(i+1));//directly output
}
if('}'==mystring.charAt(i))
{
if(0!=dummy.length())
{
if (dummy.charAt(dummy.length()-2)=='3')
{
dummy.delete(dummy.length()-2,dummy.length());
}
else if(dummy.charAt(dummy.length()-2)=='5')
{
System.out.println("「{」can not found"+"pos is"+(i+1));
}
else
System.out.println("「{」can not found"+"pos is"+(i+1));
}
else
System.out.println("「{」can not found"+"pos is"+(i+1));
}
if(']'==mystring.charAt(i))
{
if(0!=dummy.length())
{
if (dummy.charAt(dummy.length()-2)=='5')
{
dummy.delete(dummy.length()-2,dummy.length());
}
else if(dummy.charAt(dummy.length()-2)=='1')
{
System.out.println("「[」can not found"+"pos is"+(i+1));
}
else
System.out.println("「[」can not found"+"pos is"+(i+1));
}
else
System.out.println("「[」can not found"+"pos is"+(i+1));
}
}
}
while(dummy.length()!=0)
{
if (dummy.charAt(dummy.length()-2)=='1')
{
System.out.println("「)」can not found"+"pos is"+dummy.charAt(dummy.length()-1));
dummy.delete(dummy.length()-2,dummy.length());
i--;
}
else if (dummy.charAt(dummy.length()-2)=='3')
{
System.out.println("「}」can not found"+"pos is"+dummy.charAt(dummy.length()-1));
dummy.delete(dummy.length()-2,dummy.length());
}
else if (dummy.charAt(dummy.length()-2)=='5')
{
System.out.println("「]」can not found"+"pos is"+dummy.charAt(dummy.length()-1));
dummy.delete(dummy.length()-2,dummy.length());
}
}
}
}
import java.util.Set;
import java.util.TreeSet;public class StaticTest { // 左括号数组
public static char[] LEFT = {'{', '[', '('};
// 右括号数组(左右括号的位置需要一样)
public static char[] RIGHT = {'}', ']', ')'};
public static void main(String[] args) {
String str = "(1+2-[4+{8+8";
Set<Integer> set = checkBrakets(str);
showMessage(str, set);
}
/**
* 检查括号的匹配情况
* @param str 表达式
* @return 含有不匹配括号的索引位置集合
*/
public static Set<Integer> checkBrakets(String str) {
char[] chars = str.toCharArray();
Set<Integer> set = new TreeSet<Integer>();
int offset1 = 0;
int offset2 = chars.length;
// 找到最左边左括号的索引
int startIndex = startBraketIndex(str, offset1);
// 当左括号时
while (startIndex > -1) {
// 找出最右边的右括号
int endIndex = endBraketIndex(str, offset2);
// 找出左括号的类型,即在左括号数组中的索引位置,便于找出右括号
int index = findBraket(str.charAt(startIndex), LEFT);
// 当没有右括号,或者是左右的括号类型不一样
if( endIndex == -1 || RIGHT[index] != str.charAt(endIndex)) {
// 将左括号的索引位置记下
set.add(startIndex);
} else {
// 当括号完全匹配时
// endBraketIndex搜索的开始位置往左移
offset2 = endIndex;
}
// startBraketIndex搜索的开始位置往右移
offset1 = startIndex + 1;
// 继续从左边开始找左括号
startIndex = startBraketIndex(str, offset1);
}
return set;
}
/**
* 输出括号匹配检查结果
* @param str
* @param errorIndex
*/
public static void showMessage(String str, Set<Integer> errorIndex) {
char[] arrows = new char[str.length()];
Arrays.fill(arrows, ' ');
int k = 0;
for(Integer i : errorIndex) {
System.out.print(i + 1);
if(k < errorIndex.size() - 1) {
System.out.print(", ");
}
arrows[i] = '^';
k++;
}
System.out.println();
System.out.println(str);
System.out.println(new String(arrows));
}
/**
* 从startIndex向左开始搜寻第一个左括号
* @param str
* @param startIndex 从左边开始的索引点
* @return
*/
private static int startBraketIndex(String str, int startIndex) {
char[] chars = str.toCharArray();
for(int i = startIndex; i < chars.length; i++) {
if(findBraket(chars[i], LEFT) > -1) {
return i;
}
}
return -1;
}
/**
* 从lastIndex向0开始搜寻第一个右括号
* @param str
* @param lastIndex 从右边开始的索引点
* @return
*/
private static int endBraketIndex(String str, int lastIndex) {
char[] chars = str.toCharArray();
for(int i = lastIndex - 1; i >= 0; i--) {
if(findBraket(chars[i], RIGHT) > -1) {
return i;
}
}
return -1;
}
/**
* 在括号数组中搜寻括号,以判断是哪一种括号
* @param c 任意字符
* @param chars 括号数组
* @return 括号数组的索引点,没有返回-1
*/
private static int findBraket(char c, char[] chars) {
for(int i = 0; i < chars.length; i++) {
if(c == chars[i]) {
return i;
}
}
return -1;
}
}
1, 3
()[]{}
^ ^